Thread & Mutex

2006. 9. 11. 15:07

/*
* 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

밥짓는아이 테크노트/Linux, Unix