/ / Синхронизация на нишката с рубин - рубин, многонишково

Синхронизиране на нишката с рубин - рубин, многонишково

Моят процес има две теми като следното

@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.