
C++에서 쓰레드를 사용하기 위해서, C++11부터 지원하는 thread를 사용할 수 있다. C++11이전의 버전에서는 표준에서 쓰레드를 지원하지 않아 다른 외부 라이브러리나 WinAPI를 사용해서 쓰레드를 관리했어야한다.
멀티쓰레드 환경에서 가장 중요한 개념중 하나는 역시 Lock이다. 각 쓰레드에서 공유자원에 접근하기전에 해당 자원에 대한 Lock을 얻고 자원에 접근함으로 자원에 대한 상호베제를 얻을 수 있다.
C++에서 SpinLock을 구현하기 위해서 어떻게 해야할까? 우선, SpinLock대신 mutex를 사용하는 아래 코드를 보자.
동기화 메커니즘 중 하나도 Event를 사용할 수 있는데 [C# 서버] Event에서 Event를 이용한 동기화 방법에 대해서 다뤄본적이 있다.
멀티쓰레드 환경에서 동기화를 위해 사용하는 방법중 하나로 '특정 조건이나 이벤트가 발생할 때까지 대기하게 한다는 점'에서Event와 동작 방식이 비슷하다고 할 수 있다.
1. 동기적 실행 기존에 함수를 실행해 결과를 받아오는 방법은 보통 '동기적'으로 결과를 가져온다고 표현하는데 아래의 간단한 예제를 보자. 위 코드의 결과는 간단한데 그저 sum에 Calculate의 결과가 입력되어 그 값을 출력하는 것이전부인 코드다.
원래 알고있던 내용으로는 쓰레드는 각자 고유한 영역인 Stack 영억을 가지고 있다. 즉, 쓰레드가 실행하는 함수마다 서로 다른 메모리 영역을 할당 받는다.
Lock-Based Stack/Queue라는 것은 멀티쓰레드 환경에서 작동할 수 있도록 하기 위해 기존 자료구조에 Locking을 더해 하나의 자료구조로 동작할 수 있는 자료구조이다.