阿摩線上測驗 登入

申論題資訊

試卷:107年 - 107 地方政府特種考試_三等_資訊處理:程式語言#73668
科目:程式語言
年份:107年
排序:0

申論題內容

四、在一 concurrent 環境下,有一共享變數 X 其初始值為 1,程序(process) A 必須加 2 到 X,程序 B 必須將 X 乘以 4。A 與 B 都要執行三個動作 1.讀取 X;2.進行算數運算;3.將算好的值寫回 X。試列出最後可能得到 的 X 值。(20 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
在一個並發環境下,程序 A 和程序 B 對共享變數 X 進行操作,由於這是一個競態條件(race condition),最終的結果取決於操作的執行順序。讓我們考慮以下幾種可能的操作順序,並列出每種情況下最終可能的 X 值。
初始條件
X 的初始值為 1
程序 A 的操作是加 2 到 X
程序 B 的操作是將 X 乘以 4
操作步驟
每個程序的操作分三步:
讀取 X
進行算數運算
將算好的值寫回 X
可能的操作順序和結果
程序 A 全部完成後,程序 B 開始:
A 讀取 X = 1
A 計算 X + 2 = 3
A 寫回 X = 3
B 讀取 X = 3
B 計算 X * 4 = 12
B 寫回 X = 12
最終 X = 12
程序 B 全部完成後,程序 A 開始:
B 讀取 X = 1
B 計算 X * 4 = 4
B 寫回 X = 4
A 讀取 X = 4
A 計算 X + 2 = 6
A 寫回 X = 6
最終 X = 6
程序 A 和程序 B 交錯執行:
A 讀取 X = 1
B 讀取 X = 1
A 計算 X + 2 = 3
B 計算 X * 4 = 4
A 寫回 X = 3
B 寫回 X = 4
最終 X = 4
另一種交錯執行的情況:
B 讀取 X = 1
A 讀取 X = 1
B 計算 X * 4 = 4
A 計算 X + 2 = 3
B 寫回 X = 4
A 寫回 X = 3
最終 X = 3
總結
在並發環境下,程序 A 和程序 B 對共享變數 X 的操作順序會影響最終的結果。根據不同的操作順序,X 的最終值可能是:
12(程序 A 全部完成後,程序 B 開始)
6(程序 B 全部完成後,程序 A 開始)
4(程序 A 和程序 B 交錯執行,但 B 的寫回發生在 A 之前)
3(程序 A 和程序 B 交錯執行,但 A 的寫回發生在 B 之前)
這種不確定性是由競態條件引起的,通常需要通過鎖或其他同步機制來避免。