在没有真正等待的情况下发出障碍信号

时间:2019-05-30 02:08:56

标签: multithreading barrier

使用屏障时,线程将排队并从集合点同时执行。例如,有4个线程,并且屏障被初始化为4个单位。线程在主线程中启动。

t1.start() -> return true, thread1 is waiting on barrier.

t2.start() -> return false, thread2 starts failed!

在这里,我要发信号通知屏障,而不会阻塞主线程。可能吗?

t3.start() -> return false, thread3 starts failed!

在线程3上发生相同的情况。最后,

t4.start() -> return true, thread4 is waiting on barrier.

如上所示,2个线程启动失败。因此,如何发信号通知成功启动的线程在没有它们的情况下运行?在主线程上等待两次是不可能的。问题1:如何在没有真正等待的情况下发出信号。

我的障碍物是由信号量构建的,如《信号量小书》中所述。 wait函数是:

mutex.wait()
count = count + 1
mutex.signal()

if count == n: barrier.signal()

barrier.wait()
barrier.signal()

当前解决方案是删除最后两行。 wait_nolock函数是:

mutex.wait()
count = count + 1
mutex.signal()

if count == n: barrier.signal()

第二季度:我不知道这是否是一个合适的解决方案。显然,该障碍是不可重复使用的障碍。

0 个答案:

没有答案
相关问题