[C#.NET][VB.NET]執行緒 Thread 共用資料 同步 鎖定
2013-02-06 09:20
1491 查看
http://www.dotblogs.com.tw/yc421206/archive/2009/02/23/7270.aspx
使用執行緒時需要注意在多重執行緒之間的共用資料,為了不讓多執行緒共用資料時產生碰撞,.NET 2.0提供了以下類別鎖定資料,確保多執行緒不會存取到其它型別的程式。
1.C# for lock / VB for SyncLock(同步鎖定)
在VB裡只要將 lock 換成 SyncLock ,將所要鎖定的程式包起來即可
2.System.Monitor 類別
比起lock來講,System.Monitor 類別提供的方法又更多了,用法就跟lock一樣,把要保護的資料包起來就好
Enter,指定鎖定。
Exit,釋放鎖定
Wait,等待鎖定。
TryEnter,逾時釋放鎖定。
3.ReaderWriteLock 類別:定義鎖定,它支援單一寫入器和多重讀取器,好複雜,跳過跳過…
使用執行緒時需要注意在多重執行緒之間的共用資料,為了不讓多執行緒共用資料時產生碰撞,.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 類別:定義鎖定,它支援單一寫入器和多重讀取器,好複雜,跳過跳過…
相关文章推荐
- [C#.NET][VB.NET] 程式執行時拖曳控制項
- [Thread] 執行緒同步資源鎖定 – lock / SyncLock
- [Thread] 執行緒同步資源鎖定 – Monitor
- [Thread] 執行緒同步資源鎖定 – Mutex
- C#和VB.net语法对比图(转)
- 选择VB.Net还是C#
- asp.net程序性能优化的七个方面 (c#(或vb.net)程序改进)
- VB.NET and C# 语法比较手册
- Build Your Own ASP.NET 2.0 Web Site Using C# & VB [ILLUSTRATED]
- 在线VB.NET与C#代码互相转换!
- VB.NET vs. C#: 效率直击
- VB.NET and C# 语法比较手册
- Create, Read, Write, Copy, Move and Delete a Text File using C# and VB.NET
- c#vb.net在线互转
- 为什么VB.net的Shared(共享)方法在C#中叫Static(静态)?(http://zhenyulu.cnblogs.com/articles/385047.html)
- 推荐n个VB.Net to C# (C# to VB.net)代码转换(互换互转)工具
- 通过程序 VB.Net 或 C# 读取文本文件行数
- 截至到目前,我的C#和VB.NET版本的iTextSharp教程在itextsharp.sf.net上的下载次数分别达到了1859和835
- 通过string.Split()方法,谈谈VB.NET编译器和C#编译器的一点差别!
- 在.net(C# or vb.net)中如何取消一个窗体的关闭。