日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用lock同步线程,建立了10个线程实例

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用lock同步线程,建立了10个线程实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在C#中處理同步
過對指定對象的加鎖和解鎖可以實現同步代碼段的訪問。
在.NET的System.Threading命名空間中提供了Monitor類來實現加鎖與解鎖。該類中的方法都是靜態的。
如下表:


C#中 lock關鍵字提供了與Monitoy.Enter和Monitoy.Exit同樣的功能,這種方法用在你的代碼段不能被其他獨立的線程中斷的情況。通過對Monitor類的簡易封裝,lock為同步訪問變量提供了一個非常簡單的方式,其用法如下:
lock(x)
{
?// 使用x的語句
}
lock語句把變量放在圓括號中,以包裝對象,稱為獨占鎖或排它鎖。當執行帶有lock關鍵字的復合語句時,獨占鎖會保留下來。當變量被包裝在獨占鎖中時,其他線程就不能訪問該變量。如果在上面的代碼中使用獨占鎖,在執行復合語句時,這個線程就會失去其時間片。如果下一個獲得時間片的線程試圖訪問變量,就會被拒絕。Windows會讓其他線程處于睡眠狀態,直到解除了獨占鎖為止。

?

Code
using?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个线程实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。