1. 程式人生 > >關於多線程並發同時使用lock時的疑問

關於多線程並發同時使用lock時的疑問

color 才會 blog 運行 一個 parallel 無法 div 程序員

本篇對lock的解釋,主要是面向unity程序員,讓其在遊戲中更好的運用lock排他鎖。

lock:排他鎖

一般使用object o = new object()來進行排他判斷。

如果四個線程同時執行,

例如:

 Parallel.For(0, 4, (i) =>
            {
                lock (o)
                {
    
                }
            });

以上代碼為一個任務在4個線程下並發,當o被線程1鎖,線程234均會等待,直至o解除鎖定才會向下執行。

相對unity協程阻塞的解釋:

yield return new WaitUntil(()=> { return true; } );

 和上面unity協程類似,只有返回true的時候才會向下執行,如果不能返回true,則會一直阻塞不往下跑。

這樣lock的運行就知道了,如果lock的對象無法被獲取,線程也就會一直阻塞,直到獲取到了才會向下執行。

關於多線程並發同時使用lock時的疑問