#include #include #include DWORD WINAPI ThreadFunc( void* arg ) ; char thread1[] = "A Thread" ; char thread2[] = "B Thread" ; int number = 0 ; HANDLE hMutex ; // Mutex »ý¼º½Ã ÇÚµéÀ» ÀúÀåÇϱâ À§ÇÑ º¯¼ö. ¾²·¹µé¿¡ ÀÇÇؼ­ °øÀ¯µÇ¹Ç·Î ¹Ýµå½Ã Àü¿ªº¯¼ö. void main() { HANDLE hThread1, hThread2 ; DWORD dwThreadID1, dwThreadID2 ; hMutex = CreateMutex( NULL, FALSE, NULL ) ; // Mutex ¿ÀºêÁ§Æ® »ý¼º. »ý¼º½Ã ÇÚµéÀ» ¸®ÅÏ. ÇöÀç FALSE : signaled »óÅ if( hMutex == NULL ) puts( "¹ÂÅؽº ¿ÀºêÁ§Æ® »ý¼º ½ÇÆÐ" ) ; hThread1 = (HANDLE)_beginthreadex( NULL, 0, (unsigned int (_stdcall *)(void *) )ThreadFunc, (void*)thread1, 0, (unsigned*)&dwThreadID1 ) ; hThread2 = (HANDLE)_beginthreadex( NULL, 0, (unsigned int (_stdcall *)(void *) )ThreadFunc, (void*)thread2, 0, (unsigned*)&dwThreadID2 ) ; if( hThread1 == 0 || hThread2 == 0 ) { puts( "_beginthreadex error" ) ; exit( 1 ) ; } if( WaitForSingleObject( hThread1, INFINITE ) == WAIT_FAILED ) puts( "¾²·¹µå wait ¿À·ù" ) ; if( WaitForSingleObject( hThread2, INFINITE ) == WAIT_FAILED ) puts( "¾²·¹µå wait ¿À·ù" ) ; printf( "ÃÖÁ¾ number : %d\n", number ) ; CloseHandle( hMutex ) ; // Mutex ¿ÀºêÁ§Æ® ¼Ò¸ê } DWORD WINAPI ThreadFunc( void* arg ) { int i; for(i = 0 ; i < 5 ; i++ ) { WaitForSingleObject( hMutex, INFINITE ) ; // Mutex ¸¦ ¾ò´Â´Ù.(Å°¸¦ ¾ò´Â´Ù) // ÀӰ迵¿ª Sleep(100) ; // µÎ°³ÀÇ ¾²·¹µå°¡ ¹ø°¥¾Æ °¡¸é¼­ ½ÇÇàµÇµµ·Ï µô·¹À̸¦ ½ÃŲ´Ù. number++ ; printf( "½ÇÇà : %s, number :%d\n", (char*)arg, number ) ; ReleaseMutex( hMutex ) ; // Mutex ¸¦ ¹ÝȯÇÑ´Ù. (Å°¸¦ µ¹·ÁÁØ´Ù) } return 0 ; }