同时启动pthreads

3 c synchronization pthreads

有什么不同的方法可以确保一堆pthreads所有人同时开始?

我只能找到一种方式,即.barrier在主线程中初始化a ,然后在新创建的pthread中等待它.

pax*_*blo 6

这几乎是正是我如何在过去做到了.

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或不同的线程方法(没有障碍)的机会,因为正如问题所述,这一种不同的方式.