1

如何使用,即使在蟒蛇号和奇数函数的两个同步线程同步如何将两个线程与偶数和奇数功能

它必须像下面的返回值:

fun1 odd = 1 
fun2 even =2 
fun1 odd = 3 
fun2 even =4 
fun1 odd = 5 
fun2 even =6 

请任何对此有一个帮助。

+0

更多的背景将是受欢迎的 - 这些线程工人?他们应该按顺序开始执行任务,还是只按顺序报告结果?所有的任务是否提前?或者它是一个循环调度程序,在这种情况下,这些线程是否应该只在它们都到达临界区时才被调度,或者每个线程是否应该等待另一个线程(可能会死锁)? –

+0

您正在寻找的是或许在不同领域称为“令牌传递”或“传递接力棒”。 –

回答

1

您可以使用“Event”为此,类似这样的例子:

import threading 


class PrintNumbers(threading.Thread): 
    def __init__(self, start_number, end_number, step, set_event, clear_event): 
     threading.Thread.__init__(self) 
     self.start_number = start_number 
     self.end_number = end_number 
     self.step = step 
     self.set_event = set_event 
     self.clear_event = clear_event 

    def run(self): 
     for i in range(self.start_number, self.end_number, self.step): 
      print(i) 
      self.set_event.set() 
      self.clear_event.clear() 
      self.clear_event.wait() 
     self.set_event.set() 


threading_event1 = threading.Event() 
threading_event2 = threading.Event() 

t1 = PrintNumbers(0, 10, 2, threading_event1, threading_event2) 
t2 = PrintNumbers(1, 10, 2, threading_event2, threading_event1) 

t1.start() 
t2.start() 

t1.join() 
t2.join() 

此代码创建了两个事件,在一个线程中设置它,另一个是在同一个线程中清除一个事件。每个线程设置另一个事件并在清除它之后等待它的事件。

+0

谢谢Amin ..它工作得很好。很好的解释 –

+0

这是一个线程同步吗?Amin请让我知道关于同步 –

+0

你可以像这样扩展这个代码(假设线程像一个循环,并使用下一个事件作为设置事件): 'threading_event1 = threading.Event )'' = threading_event2 threading.Event()'' = threading_event3 threading.Event()' 'T1 = PrintNumbers(0,10,3,threading_event1,threading_event2)'' T2 = PrintNumbers(1,10, 23 threading_event2,threading_event3)' 't3 = PrintNumbers(2,10,3,threading_event3,threading_event1)' ' –