VS C 執行緒篇之執行緒同步

2021-08-17 23:01:37 字數 2695 閱讀 3453

執行緒同步解決

不同執行緒函式的執行順序,進行執行緒協調。  

api

dword winapi waitforsingleobject(

handle hhandle, // 物件控制代碼 thread/event/job/mutex/process/semaphore/waitable timer/memory resource notification

dword dwmilliseconds // 等待時間,infinite一直等待

);返回值

wait_timeout 0x00000102l // 等待超時

wait_object_0 0x00000000l // 等待到了指定物件發出訊號狀態

wait_abandoned 0x00000080l // 當 hhandle 為 mutex 時,擁有mutex的執行緒在結束時沒有釋放核心物件會返回該值。

wait_failed ((dword)0xffffffff). // 呼叫getlasterror獲得錯誤資訊

dword winapi waitformultipleobjects(

dword ncount, // 等待執行緒數量(最多maximum_wait_objects個)

const handle* lphandles, // 執行緒控制代碼指標陣列(包含多個執行緒控制代碼)

bool bwaitall, // 是否全部等待,true,若所有執行緒都為已通知狀態則函式返回 wait_object_0

// false 返回值為執行緒核心物件陣列的索引值

dword dwmilliseconds // 等待時間

);返回值

wait_object_0 to (wait_object_0 + ncount– 1)

wait_abandoned_0 to (wait_abandoned_0 + ncount– 1)

wait_timeout 0x00000102l

wait_failed ((dword)0xffffffff) // 失敗 呼叫getlasterror返回錯誤資訊

例程1:等待子執行緒執行完畢

#include #include #include dword winapi threadprofunc(lpvoid lpparam);

int main(int argc, char **argv)

system("pause");

return 0;

}dword winapi threadprofunc(lpvoid lpparam)

return 0;

}

執行結果

hello

hello

hello

hello

nihao

nihao

nihao

nihao

請按任意鍵繼續. . .

例程2:執行緒a給變數賦值,執行緒b取變數的值,主線程列印,對變數值順序進行控制

#include #include #include int g_ivara = 10;

int g_ivarb = 30;

int g_ivarc = 0;

handle g_hthreada;

handle g_hthreadb;

dword winapi threadprofunca(lpvoid lpparam);

dword winapi threadprofuncb(lpvoid lpparam);

int main(int argc, char **argv)

dword winapi threadprofunca(lpvoid lpparam)

dword winapi threadprofuncb(lpvoid lpparam)

例程3:多個執行緒一起等待操作,返回已經結束執行緒的最小索引

#include #include #include handle g_hthread[4];

dword winapi threadprofunca(lpvoid lpparam);

dword winapi threadprofuncb(lpvoid lpparam);

dword winapi threadprofuncc(lpvoid lpparam);

dword winapi threadprofuncd(lpvoid lpparam);

int main(int argc, char **argv)

dword winapi threadprofunca(lpvoid lpparam)

dword winapi threadprofuncb(lpvoid lpparam)

dword winapi threadprofuncc(lpvoid lpparam)

dword winapi threadprofuncd(lpvoid lpparam)

執行結果:
d

main, reterr = 3

a請按任意鍵繼續. . . bc

VS C 執行緒篇之原子同步

long interlockeddecrement long volatile addend 原子遞減變數的指標 返回值 變數遞減後的值long interlockedincrement long volatile addend 原子遞增變數的指標 返回值 變數遞增後的值long interlock...

執行緒同步之mutex篇

原理 當乙個互斥物件不再被乙個執行緒所擁有,它就處於發訊號狀態。此時首先呼叫waitforsingleobject 函式的執行緒就成為該互斥物件的擁有者,此互斥物件設為不發訊號狀態。當執行緒呼叫releasemutex 函式並傳遞乙個互斥物件的控制代碼作為引數時,這種擁有關係就被解除,互斥物件重新進...

VS C 建立執行緒

建立執行緒方法一 handle winapi createthread lpsecurity attributes lpthreadattributes,執行緒安全屬性 size t dwstacksize,執行緒堆疊大小 lpthread start routine lpstartaddress,...