[ C/C++ ] Window Thread 프로그래밍

2021. 10. 29. 12:30·Archive/Develop
728x90
반응형
#include <stdio.h>
#include <windows.h>
#include <process.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
unsigned WINAPI ThreadFunc(void *arg);

int g_checkid = 0;

int main(int argc, char *argv[]) {
	
	HANDLE hThread,hThread2;
	unsigned threadID;
	int param=5;
	
	hThread=(HANDLE)_beginthreadex(NULL, 0, ThreadFunc, (void*)&param, 0, &threadID);
	hThread2=(HANDLE)_beginthreadex(NULL, 0, ThreadFunc, (void*)&param, 0, &threadID);
	if(hThread==0){
		puts(" beginthreadex() error");
		return -1;
	}
	Sleep(3003);
	puts("end of main");
	g_checkid+=1;
	printf("g_checkid = %d\n",g_checkid);
	return 0;
}

unsigned WINAPI ThreadFunc(void *arg){
	int i;
	int cnt=*((int*)arg);
	for(i=0; i<cnt ;i++){
		Sleep(1000); puts("running thread\n"); printf("g_checkid = %d\n",g_checkid);
		g_checkid+=10;
	}
	return 0;
}

 

 

 

여기서 프로세스와는 다른 스레드만의 특징을 찾아볼 수 있다.

 

g_checkid 라는 전역변수를 공유하는 것이다.

 

 

실행시키면 상황에 따라 값이 61이 나오기도, 41이 나오기도 한다.

 

 

다음에는 동기화에 대해서 공부해봐야겠다.

위와 같은 코드는 컴파일 에러는 나지 않고, main 에서 나오는 Sleep 을 크게 늘리면 값이 거의 고정적으로 61이 나오겠지만, 정말 간혹가다 41이라는 값이 튀어나올 수 있다.

 

즉, 컴파일에러는 나지 않지만 런타임 시 에러(원하는 값이 아니기 때문에 에러라고 표현)가 날 수 있는 확률을 가지고 있는 불완전한 코드인 것이다.

 

이러한 런타임 에러를 방지하기 위해 동기화가 필요하다.

 

 

 

 

같은 코드를 실행시키는데 위 사진과 같이 두 케이스가 나온다.

728x90
반응형

'Archive > Develop' 카테고리의 다른 글

개발 방법론 | SPA(Single Page Application)  (0) 2021.11.15
[ Django ] Django REST Framework 000  (0) 2021.11.15
[ 정규표현식 ] 패스워드 정책(영문자, 숫자, 특수문자, 8글자 이상) 패턴  (0) 2021.10.28
[ Android ] 이미지 처리 라이브러리 글라이드(Glide)  (0) 2021.10.11
[ 정규표현식 ] email 주소 패턴 만들기 | 예제로 알아보는 정규표현식 | 정규표현식 예제  (0) 2021.10.05
'Archive/Develop' 카테고리의 다른 글
  • 개발 방법론 | SPA(Single Page Application)
  • [ Django ] Django REST Framework 000
  • [ 정규표현식 ] 패스워드 정책(영문자, 숫자, 특수문자, 8글자 이상) 패턴
  • [ Android ] 이미지 처리 라이브러리 글라이드(Glide)
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    비박스
    파이썬 알고리즘
    자바스크립트
    Git
    백준 문제풀이
    javascript
    백준 풀이
    카카오 100일 프로젝트
    코드업 파이썬 기초 100제
    자바스크립트 객체
    Django
    파이썬 문제
    파이썬 백준
    파이썬 기초 문제
    백준 파이썬
    파이썬 기초
    C++
    오라클
    보안뉴스
    백준
    docker
    장고
    oracle db
    코드업 기초
    Oracle
    자바스크립트 API
    Codeup
    파이썬
    Python
    코드업
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ C/C++ ] Window Thread 프로그래밍
상단으로

티스토리툴바