在使用多線程的時候,,往往存在一定的公共數(shù)據(jù),為了避免多個線程同時操作同一數(shù)據(jù),,我們需要為線程加鎖,。
加鎖的原理:
每一個引用類型的對象都有一個同步索引塊,指示當前使用該對象的線程數(shù),,每個線程執(zhí)行到Lock語句塊的時候就會判斷當前鎖定項(這里是this,當前窗體對象)的同步索引塊是否等于0(即沒有線程在訪問該變量),,如果等于0則進入執(zhí)行塊,首先將同步索引塊的索引加1,,表示當前多了一個線程使用this,,等lock塊執(zhí)行完成再將同步索引塊中的索引值減1,使得其它線程能夠繼續(xù)訪問,,這樣就相當于實現(xiàn)了一個排隊機制,,使得在適當?shù)臅r候該串行執(zhí)行的代碼串行執(zhí)行。
我們可以利用lock語句為線程加鎖,。示例代碼如下:
需要鎖定對象:lock(this)
需要鎖定代碼段:Object obj = new Object(); lock(obj){…}
我們還可以利用lock語句的語法糖Monitor來實現(xiàn),,示例代碼如下:
class Control
{
private object obj=new object();
public void Method()
{
Monitor.Enter(obj);
try
{......}
catch(Excetion ex)
{......}
finally
{
Monitor.Exit(obj);
}
}
}
至此,這個初級的多線程入門系列完成了,。后面隨著對多線程認識的加深,,我們再來進行補充。