1、win32中線程的創建
在win32中創建線程API函數
1 HANDLE CreateThread( 2 LPSECURITY_ATTRIBUTES lpsa, 3 DWORD cbStack, 4 LPTHREAD_START_ROUTINE lpStartAddr, 5 LPVOID lpvThreadParam, 6 DWORD fdwCreate, 7 LPDWORD lpIDThread 8 );
創建后一般關閉線程句柄,因為后期可能不在用到。關閉句柄不會影響線程的工作,這樣可以保證進程在退出時,減小引用計數,線程會釋放資源。
2、線程的關閉
[1] 退出線程函數的循環來退出線程;(盡量采用該方法)
[2] 進程中的一個線程調用ExitProcess;
[3] 另一個進程的線程中調用TerminalProcess;
3、線程同步
[1] 關鍵區域(Critical Sections)
創建函數:InitializeCriticalSection
刪除函數:DeleteCriticalSection
進入函數:EnterCriticalSection
離開函數:LeaveCriticalSection
提示:
(1)不要在一個Critical Section中調用sleep或者任何wait函數;
(2)出現兩個Critical Section時避免死鎖;
[2] 事件(Event)
創建函數:CreateEvent
刪除函數:CloseHandle
進入函數:SetEvent
離開函數:ResetEvent
[3] 互斥量(Mutex)
創建函數:CreateMutex
刪除函數:CloseHandle
進入函數:WriteForSingleObject、WaitForMultiObject
離開函數:ReleaseMutex
提示:
(1)CloseHandle並不是實際的關閉互斥量,Mutex是一個核心對象,CloseHandle只是將引用計數減一,如果進程退出時,引用計數降為零,系統就是釋放核心的資源。
[4] 信號量(Semaphores)
線程同步中的注意點:
[1] 只有Critical Sections不是核心對象;
[2] 互斥量ReleaseMutex后立即變為激活狀態;
[3] Event可以完全在程序的操控之下;
void InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
