티스토리 뷰

책 ) 뇌를 자극하는 TCP/IP 소켓 프로그래밍

 

멀티 쓰레드 중에서 공유데이터를 Lock 하여 두개의 멀티쓰레드가 동시에 데이터에 접근하는 충돌을 방지하는 것을 구현하였습니다. 세마포어를 통해서 키를 생성하고 키를 획득한 쓰레드가 먼저 데이터에 접근하여 작업 후, 반환하게 되면 다음 쓰레드가 키를 얻어서 작업을 수행한다.

#pragma warning(disable:4996)
#include<stdio.h>
#include<process.h>
#include<Windows.h>

#define MAX_THREAD 2

HANDLE gsem;
int count = 0;

DWORD WINAPI myThread(void* arg) {
	int threadNum = *((int*)arg);
	int tmp;
	printf("Thread Num : %d\n", threadNum);
	while (1) {
		WaitForSingleObject(gsem, INFINITE);		//키 얻기
		tmp = count;
		Sleep(1000);
		count = tmp + 1;
		printf("#(%d) : Count ++ %d\n", threadNum, count);
		ReleaseSemaphore(gsem, 1, NULL);			//키 반납
	}
	return 0;
}
int main() {
	HANDLE ThreadH[2];
	int iloop;

	gsem = CreateSemaphore(NULL, 1, 1, L"TestSem");
	if (gsem == NULL) {
		printf("Error %d\n", GetLastError());
		return 1;
	}

	if(OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, L"TestSem") == NULL){
		printf("Semaphore Open Error %d\n", GetLastError());
		return 1;
	}
	for (iloop = 0; iloop < MAX_THREAD; iloop++) {
		printf("Create Thread %d\n", iloop);
		ThreadH[iloop] = CreateThread(NULL, 0, myThread, (void*)&iloop, 0, NULL); //쓰레드 생성
		Sleep(500);			//실행 시간
	}
	CloseHandle(gsem);
	return 0;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함