最近寫一程式,誤用了mutex的功能,錯把mutex當event用了。
【mutex】
使用mutex的主要函式:createmutex、releasemutex、openmutex、waitforsingleobject、waitformultipleobjects。
【event】
與mutex不一樣,event是任何時候都是可以操作的,而且沒有同呼叫多次waitforsingleobject和同時釋放多次一說。它的主要操作函式有:createevent、setevent、waitforsingleobject。
createevent引數說明。
第二個引數表示呼叫waitforsingleobject後手動(true)/自動(false)為無訊號狀態。
第三個引數表示初始狀態為有(true)/無(false)訊號。
event的獲得是通過乙個佇列去排隊獲得的,setevent沒有限制使用,在任何可以呼叫的地方都可以呼叫。
mutex,的互斥是以執行緒為基本單位,而event是以**段為基本單位。所以在兩者的使用上有著不同的功能用途。
【測試**】
//世界如此的美好,江山如此的多嬌! ---陽光正能量--->>>>>>>>>>>>>>>mutex_release.cpp : 定義控制台應用程式的入口點。
////
#include "
stdafx.h
"#include
"iostream
"#include
"windows.h
"using
namespace
std;
dword winapi threadproc1(lpvoid lpparam);
dword winapi threadproc2(lpvoid lpparam);
handle hevent =null;
handle hthread1 =null;
handle hthread2 =null;
int main(int argc,char *args)
//dword dreturn = waitforsingleobject(hevent,infinite);
//cout<< dreturn << endl;
//releasemutex(hevent);
//releasemutex(hevent);
while(1
)
return0;
}dword winapi threadproc1(lpvoid lpparam)
dreturn =waitforsingleobject(hevent,infinite);
if (wait_object_0 ==dreturn)
cout
<
in thread1 --signal
"<
//setevent(hevent);
//releasemutex(hevent);
//releasemutex(hevent);
while(1
)
return0;
}dword winapi threadproc2(lpvoid lpparam)
cout
<
in thread2--signal
"<
//setevent(hevent);
//setevent(hevent);
//releasemutex(hevent);
while(1
)
return0;
}//int _tmain(int argc, _tchar* argv)
////
//printf("create yes!\n");
//waitforsingleobject(m_hmutex, infinite);
//printf("wait yes\n");
////
//setevent(m_hmutex);
////
setevent(m_hmutex);
////
setevent(m_hmutex);
////
//releasemutex(m_hmutex);
////
releasemutex(m_hmutex);
////
releasemutex(m_hmutex);
////
waitforsingleobject(m_hmutex, infinite);
//printf("wait yes 2\n");
//waitforsingleobject(m_hmutex, infinite);
//printf("wait yes 3\n");
//waitforsingleobject(m_hmutex, infinite);
//printf("wait yes 4\n");
//waitforsingleobject(m_hmutex, infinite);
//printf("wait yes 5\n");
//waitforsingleobject(m_hmutex, infinite);
//printf("wait yes 6\n");
//waitforsingleobject(m_hmutex, infinite);
//printf("wait yes 7\n");
//return 0;
//}
執行緒同步與互斥 互斥鎖(mutex)
在多執行緒訪問共享資料的時候可能會發生衝突,例如 衝突的例子 include include include includeint common data 0 公共資料 void increase data void vptr return null int main void err pthrea...
程序間互斥 Mutex
對於普通的執行緒間互斥可以使用createmutex傳建乙個匿名的互斥量做互斥,對程序間的互斥就要用到命名互斥量來做互斥了。用到的函式有 1.建立乙個命名互斥量使用createmutex 方法,只需把lpname引數設定為非null,如 my mutex handle winapi createmu...
linux之mutex 互斥鎖
在posix thread中定義有一套專門用於執行緒同步的mutex函式 有兩種方法建立互斥鎖,靜態方式和動態方式。posix定義了乙個巨集pthread mutex initializer來靜態初始化互斥鎖,方法如下 pthread mutex t mutex pthread mutex init...