使用屏障时,线程将排队并从集合点同时执行。例如,有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()
第二季度:我不知道这是否是一个合适的解决方案。显然,该障碍是不可重复使用的障碍。