Monitor 類鎖定一個對象
當多線程公用一個對象時
Monitor類可以鎖定一個對象
Monitor必須和一個具體的對象相關聯
……
Queue oQueue=new Queue()
Monitor
如上所示
對於任何一個被Monitor鎖定的對象
當擁有對象鎖的線程准備釋放鎖時
下面是一個展示如何使用lock關鍵字和Monitor類來實現線程的同步和通訊的例子
這個例程中
用到的系統命名空間如下
首先
示例如下
{
int cellContents; // Cell對象裡邊的內容
bool readerFlag = false; // 狀態標志
public int ReadFromCell( )
{
lock(this) // Lock關鍵字保證了什麼
{
if (!readerFlag)//如果現在不可讀取
{
try
{
//等待WriteToCell方法中調用Monitor
Monitor
}
catch (SynchronizationLockException e)
{
Console
}
catch (ThreadInterruptedException e)
{
Console
}
}
Console
readerFlag = false;
//重置readerFlag標志
Monitor
//通知WriteToCell()方法(該方法在另外一個線程中執行
}
return cellContents;
}
public void WriteToCell(int n)
{
lock(this)
{
if (readerFlag)
{
try
{
Monitor
}
catch (SynchronizationLockException e)
{
//當同步方法(指Monitor類除Enter之外的方法)在非同步的代碼區被調用
Console
}
catch (ThreadInterruptedException e)
{
//當線程在等待狀態的時候中止
Console
}
}
cellContents = n;
Console
readerFlag = true;
Monitor
//通知另外一個線程中正在等待的ReadFromCell()方法
}
}
}
From:http://tw.wingwit.com/Article/program/net/201311/15297.html