【发布时间】:2010-07-01 10:17:20
【问题描述】:
Windows 和 Solaris 线程 API 都允许在“暂停”状态下创建线程。线程仅在稍后“恢复”时才真正开始。我已经习惯了没有这个概念的 POSIX 线程,我正在努力理解它的动机。谁能建议为什么创建一个“暂停”线程会很有用?
这是一个简单的说明性示例。 WinAPI 允许我这样做:
t = CreateThread(NULL,0,func,NULL,CREATE_SUSPENDED,NULL);
// A. Thread not running, so do... something here?
ResumeThread(t);
// B. Thread running, so do something else.
(更简单的)POSIX 等效项似乎是:
// A. Thread not running, so do... something here?
pthread_create(&t,NULL,func,NULL);
// B. Thread running, so do something else.
有没有人能够在 A 点(在 CreateThread 和 ResumeThread 之间)做一些在 POSIX 上很难做到的实际例子?
【问题讨论】:
-
哦,顺便说一句,我知道直接使用 CreateThread 实际上并不是您应该在 C/C++ 中执行的操作 - 它不会让 C-Runtime 有机会初始化各种内务处理。应该使用 _beginthreadex 代替(或者我读到了。)
-
在 POSIX 上实现这样的机制并不难。您将不得不使用简单的 pthread_cond_wait
-
@Ragster - 感谢您的提示。 _beginthreadex() 确实是在 Windows 上启动线程的正确方法。
标签: c++ c multithreading