close

[純收藏]  from : 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 類別:定義鎖定

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 11 的頭像
    11

    冠霖的部落格

    11 發表在 痞客邦 留言(0) 人氣()