[Thread] 執行緒同步資源鎖定 – lock / SyncLock

http://www.dotblogs.com.tw/yc421206/archive/2011/01/07/20624.aspx


使用執行緒時常會共用一些資源(方法),為了不讓執行緒同時間進入同一個資源,避免造成資源在演算過程中發生錯亂,可以使用關鍵字C# for lock / VB for SyncLock來鎖定資源,等待執行緒工作完成後才會自動解除鎖定,讓其它的執行緒進來使用資源,如果其他執行緒嘗試進入已鎖定的程式碼,它將會等候、封鎖,直到該物件被釋出;這算是一種簡單的鎖定方式,若你的方法是共用且需要鎖定,那這種鎖定或許就能成為你的選擇。

msdn上建議我們在鎖定是最好是定義要鎖定的 private 物件,或者定義 private static 物件變數保護所有執行個體通用的資料。

private static object _thisLock = new object();
lock (_thisLock)
{
   //TODO
}

基本上這是一個很簡單的用法,接下來我只是要驗証,它在等待中的生命週期,我寫了簡單的code,我在DoWorker方法用了Sleep(10000)是模擬這個工作花了很多時間,方便觀察執行緒狀態。 
image

 

我們可以看到最先進入到DoWorker的是編號12的執行緒,其他的執行緒狀態則是WaitSleepJoin,等到編號12狀態變成Stopped後,編號11才能進入DoWorker方法裡,依此類推下去。

image


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值