这几乎是正是我如何在过去做到了.
main:
claim mutex
for each desired thread:
start child
release mutex
:
child:
claim mutex
release mutex
:
Run Code Online (Sandbox Code Playgroud)
请注意,这并不能保证所有线程在第一个线程开始执行之前已经启动,只是主线程创建了它们.
为此,您可以使用以下方法:
main:
claim mutex
set unstarted to 0
for each desired thread:
start child
add 1 to unstarted
release mutex
:
child:
claim mutex
subtract 1 from unstarted
while unstarted > 0:
release mutex
yield // if necessary
claim mutex
release mutex
:
Run Code Online (Sandbox Code Playgroud)
无论什么初始化,线程必须做什么才能被认为开始将发生在claim和之间subtract.
我从进一步的调查中看到,障碍实际上是一种更优雅的方式.它们在我使用的pthread实现中实际上不可用,这就是为什么我的代码看起来有点冗长.
但是,我会暂时保留有人使用pre-v6 pthreads或不同的线程方法(没有障碍)的机会,因为正如问题所述,这是一种不同的方式.