reference: "전문가를 위한 C++" / 마크 그레고리멀티쓰레드 프로그래밍을 이용하면 시스템에 있는 여러 프로세서 유닛을 병렬(parallel)로 사용하는 프로그램을 작성할 수 있다. 시스템에 프로세서 유닛이 장착되는 방식은 다양한데, 독립적인 CPU를 담은 프
멀티쓰레드 프로그래밍에서의 이슈는 '경쟁 상태', '테어링', '데드락', '거짓 공유'등과 같은 문제를 발생하지 않게 만드는 것이다. 이러한 문제들은 주로 아토믹(atomic)과 명시적 동기화(explicit synchronization)\*\*으로 해결한다. sou
referenc: "전문가를 위한 C++" / 마크 그레고리https://woo-dev.tistory.com/161https://narakit.tistory.com/134<thread> 헤더 파일에 정의된 c++ 쓰레드 라이브러리를 사용하면 쓰레
아토믹 타입을 사용하면 동기화 기법을 적용하지 않고 읽기와 쓰기를 동시에(원자적으로) 처리하는 아토믹 접근(atomic access)이 가능하다. 아토믹 연산을 사용하지 않고 변수의 값을 변경(증가, 감소 등)시키는 것은 쓰레드에 안전하지 않다(non thread-sa
쓰레드 간 공유를 막을 수 없다면 한 번에 하나의 쓰레드만 접근할 수 있도록 동기화 메커니즘을 제공해야 한다(뮤텍스, 조건변수..).bool 타입의 값이나 정수값을 비롯한 스칼라값은 아토믹 처리로 만으로도 충분히 동기화할 수 있다. 하지만 복잡하게 구성된 데이터를 여러
SpinLock이라는 클래스를 정의하여 Lock을 구현한다. 위 코드는 문제점이 있다. 여러 쓰레드들이 while 루프(1)를 동시적으로 벗어날 수 있다.루프를 돌며 조건과 비교하는 과정(1)과 flag 변수에 값을 대입하는 과정(2)가 원자적으로 수행해야 됨을 알 수
요약1\. 네이티브 쓰레드 API를 사용해 C++에서 멀티쓰레드 애플리케이션에 관한 기본적 사항2\. 여러 쓰레드가 한 작업을 병렬(parallel)로 수행하도록 하는 방법가장 기본적인 형태의 멀티쓰레드 애플리케이션은 둘 또는 그 이상의 쓰레드를 가진 단일 프로세스로
pthread 또는 pthread_attr로 시작하는 모든 함수가 여기에 해당한다. 이들 함수 모두는 쓰레드 자체와 쓰레드 속성 객체에 적용된다. pthreads를 이용한 쓰레드의 기본적 사용은 아래와 같다.가장 중요한 pthreads 헤더는 pthread.h이다. 이
pthread_mutex\_ 또는 pthread_mutexattr\_ 접두어가 붙는 함수를 통해 뮤텍스와 그 속성 객체를 작동한다.pthreads에서 뮤텍스는 초기화되고, 해제, 락, 언락이 이루어진다. 이들은 pthread_mutexattr_t 구조체를 사용해 커스텀
세마포어(semaphores)는 POSIX 사양에서 원래 Pthreads 확장의 일부분이 아니었다.본질적으로 세마포어는 자원 카운트로 사용되는 단순한 정수이다. 세마포어를 이용해 쓰레드 안전하게 만들기 위해 원자적 동작(검사와 락)이 사용된다. POSIX 세마포어는 초
위 코드에서 로드하는 파일의 크기가 크다면, 큰 파일을 로딩하는 동안에는 일시적으로 프레임률이 뚝뚝 끊길 것코드도 지저분함멀티쓰레드를 이용하여 두 문제를 해결할 수 있음쓰레드1은 로딩 작업 중 애니메이션에 관련된 작업을 수행하고,쓰레드2는 게임 파일 로드에 대한 수행만
두 개 이상의 쓰레드가 서로를 기다리는 상황을 의미쓰레드 1은 쓰레드 2가 하던 일이 끝날 때까지 기다리고,쓰레드 2는 쓰레드 1이 하던 일이 끝날 때까지 기다리는 상황즉, 양측 모두 상태방의 일 처리가 끝나기를 기다리지만, 끝이 날 방법이 없는 상황을 '교착 상태'라
멀티쓰레드 모델의 게임 서버를 개발할 때 쓰레드는 몇 개를 만들고, 각 쓰레드는 무엇을 위해 일을 하게 만들면 좋을까?가장 쉬운 개발 방법 중 하나는 클라이언트마다 쓰레드를 배정해 주는 것이다. 클라이언트가 5000개면, 쓰레드도 5000개가 되는 것이다.이러한 방식은