[ 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 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바