인프런 커뮤니티 질문&답변
세마포어 예제 소스 코드 문의
해결된 질문
작성
·
458
·
수정됨
0
안녕하세요 강사님
세마포어 개념을 이해하려고 노력중입니다 ㅎㅎ
강의 보며 소스코드를 따라치면서 이해해보도록 노력하고 있습니다.
아래와 같이 실행하니, 보안에러가 발생하고 있습니다.
혹시 제가 소스코드를 잘못작성한건지, 실행환경설정을 바꿔주면 실행되는지 문의 드립니다.
#define CRTSECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
#include <Windows.h>
#include <process.h>
#include <conio.h>
// Semaphore를 이용한 동기화
HANDLE g_hSema;
TCHAR g_StringList[10][64] = { 0 };
UINT WINAPI ThreadSemaphore(LPVOID param)
{
	int nIndex = (int)param;
	while (TRUE)
	{
		::wsprintf(g_StringList[nIndex],
			TEXT("%d thred is Waiting"), nIndex);
		::Sleep(500);
		DWORD dwResult = ::WaitForSingleObject(g_hSema, INFINITE); // g_hSema이 끝나기를
		::wsprintf(g_StringList[nIndex],
			TEXT("%d thred is Selected##"), nIndex);
		::Sleep(500);
		::ReleaseSemaphore(g_hSema, 1, NULL);
	}
	return 0; 
}
 
int main(void)
{ 
	g_hSema = ::CreateSemaphore(NULL, 3, 3, NULL);
	UINT nThreadId = 0;
	HANDLE hThread = NULL; // 핸들 생성
	for (int i = 0; i < 10; i++) {
		hThread = (HANDLE)::_beginthreadex(
			NULL,
			0,
			ThreadSemaphore,
			(LPVOID)i,
			0,
			&nThreadId);
	}
	while (1)
	{
		system("cls");
		for (int i = 0; i < 10; i++)
		{
		    putws(gStringList[i]);
		}
		::Sleep(1000);
	} 
	return 0;
}
<에러 문구>








