[C#.NET][VB.NET]執行緒 Thread 共用資料 同步 鎖定

http://www.dotblogs.com.tw/yc421206/archive/2009/02/23/7270.aspx

使用執行緒時需要注意在多重執行緒之間的共用資料,為了不讓多執行緒共用資料時產生碰撞,.NET 2.0提供了以下類別鎖定資料,確保多執行緒不會存取到其它型別的程式。

1.C# for lock / VB for SyncLock(同步鎖定)

	private void SynRunFuc()
	{
	lock(this)
	{
	for (int i = 0; i < 100000; i++)
	{
	Counter.counter = i++;
	Interlocked.Increment(ref Counter.counter);
	}
	}
	}

 

 

 

在VB裡只要將 lock 換成 SyncLock ,將所要鎖定的程式包起來即可

	Private Sub SynRunFuc()
	SyncLock Me
	For i As Integer = 0 To 99999
	Counter.counter = System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
	Interlocked.Increment(Counter.counter)
	Next
	End SyncLock
	End Sub

 

 

 

 

2.System.Monitor 類別

比起lock來講,System.Monitor 類別提供的方法又更多了,用法就跟lock一樣,把要保護的資料包起來就好

Enter,指定鎖定。

Exit,釋放鎖定

Wait,等待鎖定。

TryEnter,逾時釋放鎖定。

	Monitor.Enter(this);
	try
	{
	for (int i = 0; i < 100000; i++)
	{
	Counter.counter = i++;
	Interlocked.Increment(ref Counter.counter);
	}
	}
	finally
	{
	Monitor.Exit(this);
	}

 

 

 

 

3.ReaderWriteLock 類別:定義鎖定,它支援單一寫入器和多重讀取器,好複雜,跳過跳過…


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值