Моят процес има две теми като следното
@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
почти винаги ще получи ключалката, без да я чака. Въпреки това, тъй като не съм написал много многоезичен код, аз се чудех дали има по-добър начин да правя това, което правя?
Отговори:
0 за отговор № 1Ако само една от нишките пише променливата, няма нужда от mutex. Така че по-добър начин във вашия пример е само премахване на mutex.