python多线程逻辑洞

时间:2015-01-30 08:50:42

标签: python multithreading

我无法想到python多线程中这个逻辑问题的解决方案

创建的每个线程都执行此操作:

  1. 等待条件变量C1
  2. 做必要的工作
  3. 使用锁定Lnt递减计数器NT以防止线程被覆盖
  4. 如果NT递减到零信号条件变量C2
  5. )循环回等待C1
  6. 主线程是这样做的:

    1. 将计数器NT设置为等待C1的线程数
    2. 释放所有等待C1的线程
    3. 等待C2
    4. 线程完成的流程工作
    5. 为下一次迭代做好准备
    6. 循环回到第1步
    7. 洞是线程可以在主线程有机会阻挡C2之前完成。不太可能发生,但可能会发生。如果发生这种情况,主线程将永远被阻止。一个混乱的解决方案是主线程执行非阻塞等待并检查计数器。我想要更清洁的解决方案。但我想不出一个。

1 个答案:

答案 0 :(得分:0)

所有工作线程都是在程序开始时创建的,从不销毁

def worker():
    global c1,c2,nt,lnt
    while true:
        c1.acquire()
        c1.wait()
        c1.release()

        Do the computations

        lnt.acquire()
        nt -= 1
        if nt == 0:
            c2.acquire()
            c2.notify()
            c2.release()
        lnt.release()

def main():
    for i in range(100000):
        c2.acquire()
        nt = numthreads
        c1.acquire()
        c1.notifyAll()
        c1.release()
        c2.wait()
        c2.release()
        process  computed data