如何阻止在另一个程序位置进入一个部分?

时间:2013-02-02 17:57:10

标签: python multithreading python-multithreading

我有两段代码:

section_a

# some code

section_b

只有在执行 section_b 时才需要阻止 section_a 。如果 section_b 中没有阻止,则 section_a 可由多个线程执行。

section_b 开始执行时,我需要向其他线程发送信号,不要进入 section_a (在此之前等待)。当最后一个帖子离开 section_a 时,必须执行 section_b

如果我使用条件锁定(threading.Condition.acquire(),threading.Condition.release())来解决问题我很困惑如何让许多人进入 section_a 线程同时。当我们在 section_a 之前调用condition.acquire()时,其他线程也会被阻止进入该部分。

while True:

    condition.acquire() # other threads that would enter point_a can't do that after this acquire()
    #section_a, point_a
    condition.release()

# another place of a program
while True:
    condition.acquire() # I'd like threads can't enter section_a after this acquire, but not after acquire before point_a
    #section_b
    condition.release()

如果 section_a 由任何线程执行,我需要阻止 section_b

你能告诉我正确的结构吗?

请原谅,我没有多线程经验。可能还有另一种结构。

1 个答案:

答案 0 :(得分:1)

您可以使用threading2中的SHLock(共享锁定),这似乎完全符合您的要求。

acquire方法接受shared参数,如果它以true传入,您将以共享模式锁定它,如果它以false传入,你将把它锁定在专属模式。

在您的示例中,您在输入section_a时会以共享模式调用acquire,这会让任意数量的线程进入section_a。当您输入section_b时,您将锁定独占模式,这将阻止任何同时共享模式锁定(即任何人在您持有锁定的同时进入section_a)