lock 關鍵字可以用來確保**塊完成執行,而不會被其他執行緒中斷。這是通過在**塊執行期間為給定物件獲取互斥鎖來實現的。
假設執行緒a先執行,執行緒b稍微慢一點。執行緒a執行到lock語句,判斷obj是否已申請了互斥鎖,
判斷依據是逐個與已存在的鎖進行object.referenceequals比較(此處未加證實),如果不存
在,則申請乙個新的互斥鎖,這時執行緒a進入lock裡面了。
這時假設執行緒b啟動了,而執行緒a還未執行完lock裡面的**。執行緒b執行到lock語句,檢查到obj
已經申請了互斥鎖,於是等待;直到執行緒a執行完畢,釋放互斥鎖,執行緒b才能申請新的互斥鎖並執行
lock裡面的**
namespace lock_test
thread.sleep(5*1000);
console.writeline("開始測成員態方法的同步");
lock we = new lock();
for (int i = 0; i < 5; i++)
console.read();}}
public class lock
",t1.tostring());
thread.sleep(200);
t1++;
console.writeline("t1自增後為:",t1.tostring());}}
public void increment2()
",t2.tostring());
thread.sleep(200);
t2++;
console.writeline("t2自增後為:",t2.tostring());}}
}}
執行結果如下:
從執行的結果來分析,變數是一次自增的,這說明,執行緒在執行自增函式的時候,是乙個執行緒乙個執行緒的執行自增函式的。為了對比結果,將**中的lock關鍵字去掉,**如下:
namespace lock_test
thread.sleep(5*1000);
console.writeline("開始測成員態方法的同步");
lock we = new lock();
for (int i = 0; i < 5; i++)
console.read();}}
public class lock
",t1.tostring());
thread.sleep(200);
t1++;
console.writeline("t1自增後為:",t1.tostring());
//}}
public void increment2()
",t2.tostring());
thread.sleep(200);
t2++;
console.writeline("t2自增後為:",t2.tostring());
//}}}}
去掉lock關鍵字後執行結果如下:
上面結果顯示,執行緒是同時執行自增函式的。
描述C 多執行緒中 lock關鍵字
描述c 多執行緒中 lock關鍵字 本文介紹c lock 關鍵字,c 提供了乙個關鍵字lock,它可以把一段 定義為互斥段 critical section 互斥段在乙個時刻內只允許乙個執行緒進入執行,而其他執行緒必須等待。每個執行緒都有自己的資源,但是 區是共享的,即每個執行緒都可以執行相同的函式...
描述C 多執行緒中 lock關鍵字
本文介紹c lock關鍵字,c 提供了乙個關鍵字lock,它可以把一段 定義為互斥段 critical section 互斥段在乙個時刻內只允許乙個執行緒進入執行,而其他執行緒必須等待。每個執行緒都有自己的資源,但是 區是共享的,即每個執行緒都可以執行相同的函式。這可能帶來的問題就是幾個執行緒同時執...
C 中explicit關鍵字作用
explicit是c 中不太常用的乙個關鍵字,其作用是用於修飾建構函式,告訴編譯器定義物件時不做隱式轉換。舉例說明 include include using namespace std class person int main int argc,char argv person person i...