互斥鎖(mutex)
互斥鎖是乙個互斥的同步物件,意味著同一時間有且僅有乙個執行緒可以獲取它。
互斥鎖可適用於乙個共享資源每次只能被乙個執行緒訪問的情況
函式://建立乙個處於未獲取狀態的互斥鎖
public mutex();
//如果owned為true,互斥鎖的初始狀態就是被主線程所獲取,否則處於未獲取狀態
public mutex(bool owned);
如果要獲取乙個互斥鎖。應呼叫互斥鎖上的waitone()方法,該方法繼承於thread.waithandle類
它處於等到狀態直至所呼叫互斥鎖可以被獲取,因此該方法將組織住主調執行緒直到指定的互斥鎖可用,如果不需要擁有互斥鎖,用releasemutex方法釋放,從而使互斥鎖可以被另外乙個執行緒所獲取。
using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading;
namespace
myttcon
class
incthread
void
run()
while
(number
>0);
console.writeline(thrd.name +"
釋放 the nmutex");
//釋放
shareres.mutex.releasemutex();}}
class
decthread
void
run()
while
(number
>0);
console.writeline(thrd.name +"
釋放 the nmutex");
//釋放
shareres.mutex.releasemutex();}}
class
program}}
system.threading.mutex在概念上和system.threading.monitor幾乎完全一致,只是lock關鍵字用的不是它,而且它旨在程序間的同步。
using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading;
namespace
class
test
else
console.readline();}}
}執行以上**生成的應用程式第乙個例項,會得到結果
running
保持第乙個執行狀態,執行第二個例項,得到結果
another
isrunning
以上**中建立了乙個mutex,從其引數的解釋中得知,第乙個呼叫執行緒將得到互斥體的初始所屬權,如果不釋放的話,其他的執行緒得不到互斥體所有權
下面看一段**(出自 ),稍有改動
using
system;
using
system.collections.generic;
using
system.text;
using
system.threading;
namespace
monitorlockmutex
public
program()
public
void
runthread()
private
void
thread1func()
}private
void
thread2func() }
private
void
testfunc(
string
str) "
, str, system.datetime.now.millisecond);}}
}兩個執行緒基本上是按照各自的時間間隔+testfunc的執行時間對testfunc函式進行讀取
將公共呼叫的函式加鎖
private
void
testfunc(
string
str) "
, str, system.datetime.now.millisecond);
}
}再次執行檢視結果,好像沒什麼區別?
加入mutex
private
void
thread1func()
mutex.releasemutex();
}private
void
thread2func()
mutex.releasemutex();
}再次執行檢視結果。
想到了什麼?thread1func() 或者thread2func()中的全部執行完畢,之後釋放互斥體,然後剩下的那個才可以訪問。
再改動一次
private
void
thread1func()
}
}private
void
thread2func()
}
}看效果……
輪換執行……
【from hsrzyn
互斥鎖 mutex 的使用
互斥鎖的使用範圍 互斥鎖 mutex 是在原子操作api的基礎上實現的訊號量行為。互斥鎖不能進行遞迴鎖定或解鎖,能用於互動上下文但是不能用於中斷上下文,同一時間只能有乙個任務持有互斥鎖,而且只有這個任務可以對互斥鎖進行解鎖。當無法獲取鎖時,執行緒進入睡眠等待狀態。互斥鎖的資料結構 struct mu...
C 實現mutex 互斥鎖
思路 實現mutex最重要的就是實現它的lock 方法和unlock 方法。我們儲存乙個全域性變數flag,flag 1表明該鎖已經鎖住,flag 0表明鎖沒有鎖住。實現lock 時,使用乙個while迴圈不斷檢測flag是否等於1,如果等於1就一直迴圈。然後將flag設定為1 unlock 方法就...
c 互斥鎖mutex使用方法
多執行緒修改基本資料型別時,也可能出現同步問題,哪怕時最簡單的累加操作。通過mutex在對同乙個資料操作時加鎖,實現了對資源的獨佔。pragma once include include include include using namespace std class mutextest prin...