原子操作和執行緒的併發執行

2021-07-10 06:14:35 字數 591 閱讀 4059

兩個等價執行緒併發的執行下列程式,a為全域性變數,初始為0,假設printf、++、–操作都是原子性的,則輸出肯定不是哪個?

void foo() 

else

printf("%d", a);

}

選項:

a. 01

b. 10

c. 12

d. 22

對於a選項: p1選執行判斷資料,決定要執行printf,中斷,p2執行完,再執行p1,結果就是00,而不是01.

對於b選項:p1執行程式,輸出1,p2執行程式,輸出0;

對於c選項:初始為0,p1執行完判斷語句,決定要執行a++,中斷,p2進行判斷,此時a仍然等於0,執行判斷語句,並執行輸入,得到1,p1然後繼續執行,此時它該執行a++,這時a=1,執行並輸出,結果為2;

對於d答案:初始為0,p1執行完判斷語句,決定要執行a++,中斷,p2進行判斷,此時a仍然等於0,執行a++,得到a=1,中斷,p1繼續執行a++,a=2,p1輸出,得到2,p1結束,p2繼續執行輸出語句,得到2;

程序 執行緒 併發執行的概念

於程序 執行緒 併發執行的概念,我們先來看下面的一段話 一般來說,當 執行乙個應用程式的時候,就啟動了乙個程序,當然有些會啟動多個程序。啟動程序的時候,作業系統會為程序分配資源,其中最主要的資源是記憶體空間,因為程式是在記憶體中執行的。在程序中,有些程式流程塊是可以亂序執行的,並且這個 塊可以同時被...

程序 執行緒 併發執行的概念

關於程序 執行緒 併發執行的概念,我們先來看下面的一段話 一般來說,當執行乙個應用程式的時候,就啟動了乙個程序,當然有些會啟動多個程序。啟動程序的時候,作業系統會為程序分配資源,其中最主要的資源是記憶體空間,因為程式是在記憶體中執行的。在程序中,有些程式流程塊是可以亂序執行的,並且這個 塊可以同時被...

作業系統 程式的併發執行

在早期無作業系統及單道批處理系統時,程式都是按照順序進行執行的。先進入記憶體的先執行,在執行的過程中不能執行其他的程式。程式中的指令也是按照順序執行,一條指令正在執行時不能開始執行另一條指令。所以程式順序執行有以下幾個特點。處理機的操作,嚴格按照順序執行,前一操作還沒執行完畢,後繼操作則不能繼續執行...