執行緒同步解決
不同執行緒函式的執行順序,進行執行緒協調。
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獲得錯誤資訊
例程1:等待子執行緒執行完畢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返回錯誤資訊
執行結果#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;
}
例程2:執行緒a給變數賦值,執行緒b取變數的值,主線程列印,對變數值順序進行控制hello
hello
hello
hello
nihao
nihao
nihao
nihao
請按任意鍵繼續. . .
例程3:多個執行緒一起等待操作,返回已經結束執行緒的最小索引#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)
執行結果:#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,...