這個例子是乙個模擬多個人在多台提款機上同時提取乙個賬戶的款的情況。
在訪問的過程中 可能 a執行緒取了100 而b執行緒那邊還看見賬戶上沒少掉那100快,所以導致資料不統一,賦值出現問題。
下面**則可以測試出加上lock鎖定 與 不加的區別。
先上兩個圖。
第乙個(加了lock的程式):
加了的 資料每一條都是完整無錯的,因為他們執行lock包含的**時,是乙個執行緒乙個執行緒的執行,而不是一擁而上 都在混亂的執行,那變數就會造成不穩定的情況。
下面是不加lock的**。
仔細看選中行 與 下一行的餘額數目。。
按理說下一行 餘額應該是509的,可是 卻條到了下下行。。10個執行緒都在取錢 對變數進行操作。。所以會出現這個問題。
這就是lock的好處。
下面貼**
form1窗體**
引入命名控制項:
using system.threading;
完整**:
namespace threadexample
private void btn_start_click(object sender, eventargs e)
private delegate void addmessagedelegate(string message);
public void addmessage(string message)
else
}private void btn_stop_click(object sender, eventargs e)}}
account.cs**:
引入命名空間:
using system.threading;
完整**:
namespace lockexample
/// /// 取款
///
/// 取款金額
/// 餘額
private int withdraw(int amount)
取款:", balance, amount);
balance = balance - amount;
str += "取款後餘額:" + balance;
form1.addlistboxitem(str);
return amount;
}else
return 0;}}
/// /// 自動取款
///
public void dotransactions()}}
}
參考: C 多執行緒Lock鎖定的使用例子 多執行緒執行緒同步)
這個例子是乙個模擬多個人在多台提款機上同時提取乙個賬戶的款的情況。在訪問的過程中 可能 a執行緒取了100 而b執行緒那邊還看見賬戶上沒少掉那100快,所以導致資料不統一,賦值出現問題。下面 則可以測試出加上lock鎖定 與 不加的區別。先上兩個圖。第乙個 加了lock的程式 加了的 資料每一條都是...
C 多執行緒Lock
一.為什麼要lock,lock了什麼?當我們使用 執行緒的時候,效率最高的方式當然是 非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要 同步機制 了,也就是說當對同乙個資源進行讀寫的時候,我們要使該資源在同一時刻只能被乙個執行緒操作,以確保每個操作...
C 執行緒Lock鎖 只能鎖定物件
一.為什麼要lock,lock了什麼?當我們使用執行緒的時候,效率最高的方式當然是非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要同步 機制了,也就是說當對同乙個資源進行讀寫的時候,我們要使該資源在同一時刻只能被乙個執行緒操作,以確保每個操作都是有...