Будет ли возможный тупик, вызванный этим кодом, когда он работает на одном процессоре или многоядерном процессоре? - PullRequest
0 голосов
/ 16 января 2019

псевдокод

 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). Это верно? И небезопасно ли, когда этот код работает на многоядерном процессоре?

...