} ÔĶÁ¡¢µ÷ÊÔ¡¢ÔËÐС¢·ÖÎö³ÌÐò£¬Ð´³öÔËÐнá¹û£¬Õâ¸ö½á¹ûÓëÄãÆÚÍûµÄÒ»ÖÂÂð£¿(´Ó½ø³Ì²¢·¢µÄ½Ç¶È¶Ô½á¹û½øÐзÖÎö) ˼¿¼Ìâ 1£®·ÖÎö½ø³ÌÓëÏ̴߳´½¨¼°¿ØÖƵÄÒìͬ¡£ £¨1£©µ÷¶È£ºÏß³Ì×÷Ϊµ÷¶ÈºÍ·ÖÅäµÄ»ù±¾µ¥Î»£¬½ø³Ì×÷ΪӵÓÐ×ÊÔ´µÄ»ù±¾µ¥Î» £¨2£©²¢·¢ÐÔ£º²»½ö½ø³ÌÖ®¼ä¿ÉÒÔ²¢·¢Ö´ÐУ¬Í¬Ò»¸ö½ø³ÌµÄ¶à¸öÏß³ÌÖ®¼äÒ²¿É²¢·¢Ö´ÐÐ £¨3£©ÓµÓÐ×ÊÔ´£º½ø³ÌÊÇÓµÓÐ×ÊÔ´µÄÒ»¸ö¶ÀÁ¢µ¥Î»£¬Ï̲߳»ÓµÓÐϵͳ×ÊÔ´£¬µ«¿ÉÒÔ·ÃÎÊÁ¥ÊôÓÚ½ø³ÌµÄ×ÊÔ´. £¨4£©ÏµÍ³¿ªÏú£ºÔÚ´´½¨»ò³·Ïû½ø³Ìʱ£¬ÓÉÓÚϵͳ¶¼ÒªÎªÖ®·ÖÅäºÍ»ØÊÕ×ÊÔ´£¬µ¼ÖÂϵͳµÄ¿ªÏúÃ÷ÏÔ´óÓÚ´´½¨»ò³·ÏûÏß³ÌʱµÄ¿ªÏú¡£ 2£®·ÖÎöÏ̸߳÷APIº¯ÊýµÄ¹¦Äܼ°Ê¹Ó÷½·¨¡£ Ï̴߳´½¨º¯Êý£ºCreateThread£¨£© »ñµÃÏß³ÌÓÅÏȼ¶º¯Êý£ºGetThreadPriority£¨£© ÉèÖÃÏß³ÌÓÅÏȼ¶º¯Êý£ºSetThreadPriority£¨£© ÅжÏÏ̵߳±Ç°ÊÇ·ñ´¦ÓÚÔËÐÐ״̬º¯Êý£ºGetExitCodeThread() »ñµÃÏ̱߳êʶ·ûº¯Êý£ºGetCurrentThreadID£¨£© ResumeThread£¨£© ÓÃÓÚ¹ÒÆðÏ̵߳ĺ¯Êý£ºSuspendThread£¨£© ÖÕÖ¹Ï̺߳¯Êý£ºExitThread£¨£© ÖÕÖ¹Ï̺߳¯Êý£ºTerminateThread()
ʵÑé¹ý³ÌÓë½á¹û£º ³ÌÐò4_1 Á½¸öÏß³ÌÎÞͬ²½´úÂ룬¹Û²ì i Öµ¡£ #include #include #define M 90000 // Ñ»·´ÎÊýÒªºÜ´ó£¬¿É¶à´Î³¢ÊÔһЩֵ int i = 0; DWORD _stdcall fun1( LPVOID p1) { } DWORD _stdcall fun2( LPVOID p1) { } int main() { DWORD id1,id2; HANDLE hThread[2]; hThread[0] = CreateThread(0,0,fun1,0,0,&id1); hThread[1] = CreateThread(0,0,fun2,0,0,&id2); WaitForMultipleObjects(2, // µÈ´ý¾ä±úµÄÊýÁ¿ for( int j =0 ;j < M;j++) i--; return 0; for( int j =0 ;j < M;j++) i++; return 0; hThread, //¾ä±úÊý×éµÄÖ¸Õë 1, //TRUEµÈ´ýËùÓжÔÏó£¬FALSEµÚÒ»¸öÐźŵ½À´¾ÍÏòÏÂÖ´ÐÐ INFINITE); //Ò»Ö±µÈ´ý } cout<<\return 0; ¹Û²ìºó·¢ÏÖiµÄÖµ²»Ò»¶¨Îª0£¬ÓÐʱÊǺܴóµÄÕýÊý£¬ÓÐʱÊǺܴóµÄ¸ºÊý£¬Õâ¾ÍÊǶà¸öÏß³ÌÔÚ²Ù×÷ͬһ±äÁ¿iʱ£¬Î´Í¬²½Ê±´øÀ´µÄÑÏÖØÎÊÌâ¡£ ³ÌÐò4_2 ¸øÕâÁ½¸öÏ̼߳ÓÉÏÁÙ½çÇøÍ¬²½´úÂ룬ÔÙÀ´¹Û²ì¶Ô i ÖµµÄÓ°Ïì¡£ #include #include int i; const int M=9000000; CRITICAL_SECTION cs; DWORD WINAPI fun1( LPVOID p1) { } DWORD _stdcall fun2( LPVOID p1) { } int main() { DWORD id1,id2; HANDLE hThread[2]; for( int j =0 ;j < M;j++){ } return j; EnterCriticalSection(&cs); i--; LeaveCriticalSection(&cs); for( int j =0 ;j < M;j++){ } return 0; EnterCriticalSection(&cs); i++; LeaveCriticalSection(&cs); } InitializeCriticalSection(&cs); hThread[0] = CreateThread(0,0,fun1,0,0,&id1); hThread[1] = CreateThread(0,0,fun2,0,0,&id2); WaitForMultipleObjects(2,hThread,1,INFINITE); cout<<\DeleteCriticalSection(&cs); return 0; ÎÞÂÛÈçºÎÖ´ÐУ¬iµÄÖµ×ÜÊÇ0£¬½á¹ûÊÇÕýÈ·µÄ¡£ ³ÌÐò4_3 ÀûÓû¥³âÌå±£»¤¹²Ïí×ÊÔ´ #include #include int i=0; const int M=9000000; HANDLE hMutex; DWORD WINAPI fun1( LPVOID p1) { for( int j =0 ;j < M;j++){ WaitForSingleObject(hMutex, INFINITE) ; } DWORD _stdcall fun2( LPVOID p1) { for( int j =0 ;j < M;j++){ i++; ReleaseMutex(hMutex) ; } return 0;