#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 |