_beginthreadex() 예제

안드라스
|2012. 11. 22. 00:12

#include <iostream>

#include <Windows.h>

#include <process.h>


int test_int = 0;


// 1번째 Thread

unsigned int WINAPI Thread_Function_one(void *avg)

{

std::cout << "(Before)Thread One Test Int : " << test_int << std::endl;

test_int++;

std::cout << "(After)Thread One Test Int : " << test_int << std::endl;


return test_int;

}


// 2번째 Thread

unsigned int WINAPI Thread_Function_two(void *avg)

{

std::cout << "(Before)Thread Two Test Int : " << test_int << std::endl;

test_int++;

std::cout << "(After)Thread Two Test Int : " << test_int << std::endl;


return test_int;

}


void main()

{

HANDLE thread_one;

HANDLE thread_two;


DWORD thread_one_id;

DWORD thread_two_id;


std::cout << "Main Test Int : " << test_int << std::endl;


  // Thread One 생성

thread_one = (HANDLE)_beginthreadex(NULL, 0, Thread_Function_one, NULL, 0, (unsigned*)&thread_one_id);

if(thread_one == 0)

{

std::cout << "_beginthreades Error" << std::endl;

}

else 

{

std::cout << "Create Thread One" << std::endl;

}

  

  // Thread Two 생성

thread_two = (HANDLE)_beginthreadex(NULL, 0, Thread_Function_two, NULL, 0, (unsigned*)&thread_two_id);

if(thread_two == 0)

{

std::cout << "_beginthreades Error" << std::endl;

}

else 

{

std::cout << "Create Thread Two" << std::endl;

}


Sleep(3000);

std::cout << "Main Test Int : " << test_int << std::endl;

std::cout << "Main Exit" << std::endl;

}


쓰레드 두 개를 만들고 생성한 뒤

전역 변수에 있는 test_int 를 각 쓰레드에서 더할 경우 값은 둘 다 바뀌게 된다.


전역에 있는 변수들은 각 쓰레드에서도 같은 위치의 값들을 변경하기 때문에

before에서 0이 되더라도 더하게 되면 2가 되어 출력된다.

'Programming > C++' 카테고리의 다른 글

쓰레드 동기화 기법 Interlocked  (0) 2013.02.27
Critical_Section 예제  (0) 2013.02.20
멀티 쓰레드의 문제  (0) 2012.11.29