Thread & Mutex
/*
* thread3_win.c
* Written by SW. YOON
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <process.h> /* _beginthreadex, _endthreadex */
DWORD WINAPI ThreadSummation(void *arg);
void ErrorHandling(char *message);
int sum=0;
int sum1[]={1, 49};
int sum2[]={50, 100};
HANDLE mutex; //핸들
int main(int argc, char **argv)
{
HANDLE hThread1, hThread2;
DWORD dwThreadID1, dwThreadID2;
mutex = CreateMutex(NULL, FALSE, NULL); //mutex 선언
hThread1 = (HANDLE)_beginthreadex(NULL, 0, ThreadSummation, (void*)sum1, 0, (unsigned *)&dwThreadID1);
hThread2 = (HANDLE)_beginthreadex(NULL, 0, ThreadSummation, (void*)sum2, 0, (unsigned *)&dwThreadID2);
if(hThread1==0 || hThread2==0)
ErrorHandling("쓰레드 생성 오류");
if(WaitForSingleObject(hThread1, INFINITE)==WAIT_FAILED)
ErrorHandling("쓰레드 wait 오류");
if(WaitForSingleObject(hThread2, INFINITE)==WAIT_FAILED)
ErrorHandling("쓰레드 wait 오류");
printf("main함수 종료, sum = %d \n", sum);
return 0;
}
DWORD WINAPI ThreadSummation(void *arg)
{
int start=((int*)arg)[0];
int end=((int*)arg)[1];
for( ; start<=end; start++) {
WaitForSingleObject(mutex, INFINITE); //임계 영역을 무한대
sum+=start;
ReleaseMutex(mutex); //
Sleep(100);
}
return 0;
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
'테크노트 > Linux, Unix' 카테고리의 다른 글
Beryl 설치하기 (0) | 2007.03.23 |
---|---|
베릴 설치후 테두리가 보이지 않을때 (0) | 2007.03.22 |
우분투 기본 세팅 (0) | 2007.03.22 |
리눅스 단축키 (0) | 2007.03.22 |
레드헷 리눅스 APM 5 완벽설치 방법 (0) | 2006.09.13 |