0

如何pthread_cond_signal在 WinOS 上实现类似 pthreads 的东西。我不想为此使用 pthreads Win32 端口,因为我也支持 Win64。

我正在开发一个基于任务的系统,其中客户端请求产生 n 个任务,这些任务在服务器上产生 n 个线程。在客户端线程产生所有服务器任务后,我希望它进入睡眠状态或其他不消耗任何系统资源的线程状态。当所有服务器任务完成后,我希望客户端线程被唤醒并将结果返回给客户端应用程序。

编辑:我考虑过在一些共享内存中等待条件变量,并在循环中检查 condvar,但循环不会消耗资源吗?我可以sleep()在循环内添加一个,但我不会得到实时的客户端请求和服务器响应——因为一个任务可能需要 1/1000 秒(但也需要几秒)。

4

2 回答 2

3

Win32 API 在 Vista 和更高版本上支持条件变量。请参阅此 MSDN 页面以获取 API 和示例用法。

WakeConditionVariable()等价于pthread_cond_signal()并且WakeAllConditionVariable()等价于pthread_cond_broadcast()

也就是说,如果您使用的是 VS2012,我真的建议您使用新的C++11 线程库。它还支持条件变量,并且由于在多个平台上运行对您来说很重要,因此使用标准库可以帮助您最终合并您的代码库。

于 2013-01-02T12:32:28.597 回答
1

您可以使用事件函数和 WaitForMultipleObject 等

有关事件功能的更多信息:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms686360 (v=vs.85).aspx#event_functions

更多关于 WaitForSingleObject 的信息:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms687032 (v=vs.85).aspx

更多关于 win32 同步的信息:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms686360 (v=vs.85).aspx

于 2013-01-02T12:26:54.380 回答