私のプロセスには、次のような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_b
thread_a
thread_b
thread_b