windows程式設計:多工與多執行緒
一個程式中的執行緒是同一程序的不同部分,因此它們共享程序的資源(記憶體、開啟的檔案等),共享靜態變數。而每個執行緒都有自己的堆疊,因此動態變數對每個執行緒是唯一的。每個執行緒還有它自己的處理器狀態,這個狀態在進行執行緒切換期間被儲存和恢復。
建立執行緒: hThread = CreateThread();
hThread = _beginthread();
_endthread();
sleep
臨界區
臨界區是一塊不可中斷的程式碼。
一個臨界區物件:CRITICAL_SECTION型別的全域性變數。如:CRITICAL_SECTION cs;。這個臨界區物件必須首先被程式中的某個執行緒初始化,通過呼叫InitializeCriticalSection (&cs); 建立一個名為cs的臨界區物件。
進入臨界區:EnterCriticalSection (&cs);此時,執行緒被認為“擁有”臨界區物件。
離開臨界區:LeaveCriticalSection (&cs);
刪除臨界區:DeleteCriticalSection (&cs);
臨界區只能用於在同一個程序內的執行緒之間的協調,要協調兩個不同程序對同一資源的共享,用“互斥物件(mutex object)”技術。
事件物件
在程式的整個生存期內保持執行緒的執行,但是必要時才啟用它。
建立事件物件:hEvent = CreateEvent (&sa, fManual, fInitial, pszName); 事件物件被初始化為有訊號, 就將fInitial設定為FALSE;
置位一個現存的事件物件:SetEvent(hEvent);
復位一個現存的事件物件:ResetEvent(hEvent);
WaitForSingleObject(hEvent, dwTimeOut);
執行緒區域性儲存:
如果需要在一個執行緒內部的各個函式呼叫都能訪問、但其它執行緒不能訪問的變數(被稱為static memory local to a thread 執行緒區域性靜態變數),就需要新的機制來實現。這就是TLS。
閱讀(71) | 評論(0) | 轉發(0) | 給主人留下些什麼吧!~~ 評論熱議