【发布时间】:2013-01-02 12:15:39
【问题描述】:
如何在 WinOS 上实现类似 pthreads pthread_cond_signal 的东西。我不想为此使用 pthreads Win32 端口,因为我也支持 Win64。
我正在开发一个基于任务的系统,其中客户端请求产生 n 个任务,这些任务在服务器上产生 n 个线程。在客户端线程产生所有服务器任务后,我希望它进入睡眠状态或其他不消耗任何系统资源的线程状态。当所有服务器任务完成后,我希望客户端线程被唤醒并将结果返回给客户端应用程序。
编辑:
我考虑过在一些共享内存中等待条件变量,并在循环中检查 condvar,但循环不会消耗资源吗?我可以在循环中添加一个sleep(),但是我不会得到实时的客户端请求和服务器响应——因为一个任务可能需要 1/1000 秒(但也需要几秒)。
【问题讨论】:
-
我认为 WinOS 是指 Microsoft Windows(某种)。有一个广泛的条件变量 API,具有高效的等待机制 (
WaitForMultipleObjects)。当轮子已经在 API 中时,不要重新实现它 -
@Petesh 好点,我倾向于这样做。很高兴知道 Windows 中有用于此的 API 方法。谢谢。
-
只是为了避免误解:有一个 64 位版本的 PThreads for Windows 可用。最新的二进制文件可以在这里下载:sourceware.org/pub/pthreads-win32/dll-latest/dll/x64(win32 指的是使用的 API,它的名字确实有点误导,因为取决于 win 版本,它还支持 64 位应用程序)
-
@alk 很高兴知道 - 命名确实具有误导性。
标签: c++ multithreading concurrency pthreads