使用lock同步线程,建立了10个线程实例
生活随笔
收集整理的這篇文章主要介紹了
使用lock同步线程,建立了10个线程实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在C#中處理同步
過對指定對象的加鎖和解鎖可以實現同步代碼段的訪問。
在.NET的System.Threading命名空間中提供了Monitor類來實現加鎖與解鎖。該類中的方法都是靜態的。
如下表:
C#中 lock關鍵字提供了與Monitoy.Enter和Monitoy.Exit同樣的功能,這種方法用在你的代碼段不能被其他獨立的線程中斷的情況。通過對Monitor類的簡易封裝,lock為同步訪問變量提供了一個非常簡單的方式,其用法如下:
lock(x)
{
?// 使用x的語句
}
lock語句把變量放在圓括號中,以包裝對象,稱為獨占鎖或排它鎖。當執行帶有lock關鍵字的復合語句時,獨占鎖會保留下來。當變量被包裝在獨占鎖中時,其他線程就不能訪問該變量。如果在上面的代碼中使用獨占鎖,在執行復合語句時,這個線程就會失去其時間片。如果下一個獲得時間片的線程試圖訪問變量,就會被拒絕。Windows會讓其他線程處于睡眠狀態,直到解除了獨占鎖為止。
?
Codeusing?System;
using?System.Threading;
namespace?ConsoleApplication2
{
????class?Account
????{
????????int?balance;????// 余額
????????Random?r?=?new?Random();
????????public?Account(int?initial)
????????{
????????????balance?=?initial;
????????}
????????//?取錢
????????int?Withdraw(int?amount)
????????{
????????????if?(balance?<?0)
????????????????throw?new?Exception("余額為負!");?
????????????lock?(this)
????????????{
????????????????if?(balance?>=?amount)
????????????????{
????????????????????Console.WriteLine("原有余額:??"?+?balance);
????????????????????Console.WriteLine("支取金額:?-"?+?amount);
????????????????????balance?=?balance?-?amount;
????????????????????Console.WriteLine("現有余額:??"?+?balance);
????????????????????return?amount;
????????????????}
????????????????else
????????????????{
????????????????????return?0;???//?拒絕交易
????????????????}
????????????}
????????}
????????
????????//?測試交易
????????public?void?DoTransactions()
????????{
????????????//?支取隨機的金額100次
????????????for?(int?i?=?0;?i?<?100;?i++)
????????????{
????????????????Withdraw(r.Next(1,?100));
????????????}
????????}
????}
????
????class?TestApp
????{
????????public?static?void?Main()
????????{
????????????//?建立10個線程同時進行交易
????????????Thread[]?threads?=?new?Thread[10];
????????????Account?acc?=?new?Account(100000000);
????????????for?(int?i?=?0;?i?<?10;?i++)
????????????{
????????????????Thread?t?=?new?Thread(new?ThreadStart(acc.DoTransactions));
????????????????threads[i]?=?t;
????????????}
????????????for?(int?i?=?0;?i?<?10;?i++)
????????????{
????????????????threads[i].Start();
????????????}
????????}
????}
}
轉載于:https://www.cnblogs.com/0754ydj/archive/2008/12/18/1357677.html
總結
以上是生活随笔為你收集整理的使用lock同步线程,建立了10个线程实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 危机下,你还敢提加薪吗?
- 下一篇: 140个绝对绝对值得收藏的电脑技巧1