三種執行緒同步方式,即互斥物件、事件物件和關鍵**段。 1、
屬於核心物件,它能夠確保執行緒擁有對單個資源的互斥訪問權。互斥物件包含乙個使用數量,乙個執行緒id和乙個計數器。id用於標識系統中的哪個執行緒當前擁有互斥物件,計數器用於指明該執行緒擁有互斥物件的次數。
2、函式:createmutex
函式原型:handle createmutex( lpsecurity_attributes lpmutexattributes, bool binitialowner, lpctstr lpname);
該函式可以建立或開啟乙個命名的或匿名的互斥物件,然後程式就可以利用該互斥物件完成執行緒間的同步。
函式引數:
<1>lpmutexattributes:值為null時,讓互斥物件使用預設的安全性。
<2>binitialowner:若值為真,則建立這個互斥物件的執行緒獲得該物件的所有權;否則,該執行緒將不獲得所建立的互斥物件的所有權。
<3>lpname:指定互斥物件的名稱。如果值為null,則建立乙個匿名的互斥物件。
ps:如果該函式呼叫成功,將返回所建立的互斥物件的控制代碼。如果建立的是命名的互斥物件,並且在createmutex函式呼叫之前,該命名的互斥物件存在,將返回已經存在的這個互斥物件的控制代碼,而這時呼叫getlasterror函式,將返回error_already_exists。當執行緒結束對互斥物件的訪問後,應釋放該物件的所有權,需呼叫releasemutex函式實現。函式原型為:bool releasemutex( handle hmutex);呼叫成功返回非0值,否則返回0。
執行緒必須主動請求共享物件的使用權才有可能獲得該所有權。需要使用函式waitforsingleobject實現,函式解釋見
3、示例**
#include #include dword winapi fun1proc(lpvoid lpparameter );
dword winapi fun2proc(lpvoid lpparameter );
int index=0;
int tickets=100;
handle hmutex;
void main()
dword winapi fun1proc( lpvoid lpparameter )
dword winapi fun1proc( lpvoid lpparameter )
dword winapi fun1proc( lpvoid lpparameter )
dword winapi fun1proc( lpvoid lpparameter )
{ while(true)
{ entercriticalsection(&g_csa);
sleep(1);
entercriticalsection(&g_csb);
if(tickets>0)
{ sleep(1);
cout<<"thread1 sell ticket : "<0)
{ sleep(1);
cout<<"thread2 sell ticket : "<
參考《vc深入詳解》
QTP三種同步方式
當乙個應用在執行了乙個步驟之後,需要一定時間的響應,而此時指令碼是按照指令碼 的執行策略,並沒有準備等待系統的響應,而是直接執行下一行指令碼,那麼此時qtp可能由於系統響應過慢而丟擲錯誤。而同步點的作用就是插入一段等待時間後再執行下一步操作。在qtp中一共有三種同步的方式 1 sync用法 brow...
執行緒 三種方式 建立執行緒
第一種 1 模擬龜兔賽跑 繼承thread 重寫run 執行緒體 2 使用執行緒 建立子類物件 物件.strat 執行緒啟動 author administrator public class rabbits extends thread class tortoise extends thread ...
C 建立執行緒三種方式
1 利用 system.timers.timer 建立執行緒,同時重新整理介面顯示,利用synchronizingobject 的屬性,出現卡死狀態。system.timers.timer t new system.timers.timer private void button click obj...