三種執行緒同步方式

2021-06-25 07:31:26 字數 1536 閱讀 9827

三種執行緒同步方式,即互斥物件、事件物件和關鍵**段。 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...