1

偶数と奇数の機能を持つ2つのスレッドを同期する方法はPythonで偶数と奇数の機能を持つ2つのスレッドを同期する方法

それは以下のように値を返すために持っている:

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() 

このコードは、同じスレッドにクリアするためのスレッドと別のそれを設定するための2つのイベント、一つのイベントを作成します。各スレッドは別のイベントを設定し、それをクリアした後イベントを待機します。

+0

ありがとうAmin ..本当にうまくいっています。ニースの説明 –

+0

同期のスレッド化ですか?私には同期について教えてください –

+0

このコードを次のように拡張することができます(ループのようなスレッドを仮定し、次のイベントをsetイベントとして使用します)。 '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) ' ' –

関連する問題