псевдокод
global int a = 0
global mutex A = unlocked
global int b = 0
global mutex B = unlocked
// The following function is called in parallel by many different threads.
function critical_sections()
// Critical section (1)
A.lock()
a := a + 1
B.lock()
b := a + b
B.unlock()
A.unlock()
// Critical section (2)
B.lock()
b := b + 1
A.lock()
a := a - b
B.unlock()
A.unlock()
// Output Results
print("A = " + a)
print("B = " + b)
end function
Я думаю, что критическая секция (2) разблокирует B до того, как A может привести к потенциальной тупиковой ситуации в критической секции (2). Это верно?
И небезопасно ли, когда этот код работает на многоядерном процессоре?