1

私のプロセスには、次のような2つのスレッドがあります

@semaphore = Mutex.new
.
.
.
.
thread_a = Thread.new {
  loop do
    #some work
    if(some_condition) 
      @semaphore.synchronize {
        @thread_b_running = false
      }
    end
  end
}

thread_b = Thread.new {
  while(@semaphore.synchronize { @thread_b_running }) do
    #thread_b's work
  end
}
thread_a.join
thread_b.join

基本的に、並行していくつかの作業を行いますが、イベントが発生した場合thread_aはシャットダウンする必要があります。ご覧のとおり、ミューテックスで保護されたブール値を使用して実行しています。ほとんどの場合、ロックを待たずにロックを取得するため、このアプローチはパフォーマンス面でそれほど悪くはないと思います。しかし、私は多くのマルチスレッド コードを書いていないので、私がやっていることを行うためのより良い方法があるかどうか疑問に思っていましたか?thread_bthread_athread_bthread_b

4

1 に答える 1

0

スレッドの 1 つだけが変数を書き込んでいる場合、ミューテックスは必要ありません。したがって、あなたの例のより良い方法は、ミューテックスを削除することです。

于 2013-08-31T02:29:38.747 に答える