【问题标题】:how to synchronize two threads with even number and odd number function如何用偶数和奇数函数同步两个线程
【发布时间】:2023-03-12 15:26:01
【问题描述】:

python中如何用偶数和奇数函数同步两个线程

它必须返回如下值:

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

请任何人帮忙。

【问题讨论】:

  • 欢迎提供更多背景信息——这些线程是工作人员吗?他们应该开始按顺序执行任务,还是只按顺序报告结果?所有任务都可以提前完成吗?或者它是一个循环调度程序,在这种情况下,这些线程是否应该仅在它们都达到临界区时才被调度,或者每个线程都应该等待另一个线程(并且可能死锁)?
  • 你在看的东西,或许在不同的领域被称为“令牌传递”或“接力棒”。

标签: python multithreading python-2.7 python-3.x python-multithreading


【解决方案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()

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

【讨论】:

  • 是单线程同步吗?阿明请告诉我同步
  • 你可以像这样扩展这段代码(假设线程像一个循环,并使用下一个事件作为设置事件):threading_event1 = threading.Event()threading_event2 = threading.Event()threading_event3 = 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)`
猜你喜欢
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
相关资源
最近更新 更多