等待线程

Waiting for threads

本文关键字:线程 等待      更新时间:2023-10-16

我使用CreateThread()为我的4个线程。
我想同时运行我所有的线程,但是在继续主线程之前等待所有4个线程完成。

我使用int并在线程开始时增加它,然后在结束时减少它,然后在我的主线程中,我使用while循环来保持,而数字超过一定值…然而,这似乎不能正常工作。

这可能吗?

在所有线程句柄上使用WaitForMultipleObjectsbWaitAll标志集。该函数将在所有线程退出后返回。

您可以使用有信号状态机制和WaitForMultipleObjects函数来等待事件或线程本身(由它们的句柄指向)达到有信号状态。

通过简单地在这些线程之间共享单个变量,您可能会遇到同步问题,特别是当它们分布在CPU的多个核心中时。

如果你想在不使用同步机制的情况下自动修改共享值,可以使用像interlockincrement这样的"Interlocked*"函数,尽管这并不能完全保证不会出现问题。无论如何,不要将该方法用作同步机制。

您可能想要做的是创建四个线程,然后按顺序在返回的四个句柄上调用WaitForSingleObject。只要确保这四个线程通过调用ExitThread退出即可。

编辑:

或者,正如Hasturkun的回答所指出的那样,使用WaitForMultipleObjects…这将是明智之举。: -)

如果您希望主线程等待所有子线程完成它们的工作,那么你可以使用:

<罢工> pthread_join

编辑:

啊,这是windows平台(我之前没有注意到),所以你需要使用,

WaitForMultipleObjects