본문 바로가기

My Study/Programming&Theory

쓰레드는 힙영역을 공유한다.

허접하지만 간략하게 코드는 짜보았습니다.


하지만 위의 코드에서는 쓰레드를 생성할 때 CreateThread를 사용함으로써 둘이상의 쓰레드가 하나의 메모리 영역에 접근 할 수 있다는 문제점을 가지고 있습니다. 그래서 CreateThread함수를 대신해서 사용하는 함수가 _beginthreadex함수를 사용합니다.

_beginthreadex 함수는 내부적으로 쓰레드가 생성 될 때 독립적인 메모리 블록을 할당한다는 것입니다.
마찬가지로 내부적으로 CreateThread함수를 호출합니다. 그러면 함수를 바꿔서 소스를 수정하겠습니다.

빨간색 네모 친 부분이 함수를 바꿀 때 신경 써주어야할 부분입니다. 

그리고 전 컴파일러를 Visual Studio 2005를 가지고 했는데 여기선 

해당 옵션을 주면 굳이 _beginthreadex함수를 쓰지 않아도 됩니다. 하지만 어떠한 환경에서 할지 모르니 애시당초에
_beginthreadex함수를 사용함으로써 위험으로부터 벗어납시다!

※쓰레드를 종료할 때도 _endthreadex를 사용해야 하지만 
해당 함수는 return문을 사용하면 자동으로 호출되기 때문에 쓰레드를 종료할 때는 return을 쓰면 된다.

힙 영역 공유를 확인한다고 글을 썼는데.. 쓰다보니 조금 딴대로 길이 새버린거 같습니다.
위 코드로 실험을 해보면 공유가 된다는 것을 알 수 있으니 직접 해보세요 ^^: