Synchronization 2

Spin Lock, Semaphore, Mutex

상호 배제(Mutual Exclusion)를 위한 OS에서 제공하는 동기화 기법으로는 Spin Lock, Mutex, Semaphore가 있다 단순히 Race Condition을 피하기 위한 상호 배제만 달성할 뿐이지, 데드락(Deadlock)이나 기아(Starvation)을 발생시킬 수도 있다 Spin Lock - lock을 얻고자 하는 쓰레드가 CPU점유를 다른 쓰레드에 내주지 않고, 계속해서 lock을 얻을 수 있는지 무의미한 루프를 돌면서(busy wait) 체크하는 방법이다. 다른 쓰레드에게 CPU점유를 내주지 않으니 Context Switching을 함으로써 생기는 오버헤드가 없다는 장점이 있지만, lock을 얻기전까지 쓸데 없는 루프를 돌면서 CPU를 점유하는데, 그 점유를 다른 쓰레드에게 ..

공부/운영체제 2022.09.02

Windows에서의 동기화 기법

DirectX 공부를 하면서 게임을 만들고 있는데 멀티 쓰레드를 이용해서 로딩을 하기 위해 그에 대한 공부가 필요해져서 해보려고 한다. 사실 우리는 visual studio에서 이미 멀티 쓰레드 환경에서 프로그래밍을 하고 있다. Window환경에서의 쓰레드 생성을 위해 필요한 함수 // 새로운 쓰레드를 생성한다 // 1번째 인자는 자식 프로세스에 상속할때 설정해주는 구조체의 포인터 // 2번째 인자는 stack size. 0을 넘겨주면 자동으로 설정된다 // 3번째 인자는 생성한 쓰레드가 동작하게 될 함수 // 4번째인자는 생성한 쓰레드가 동작하게 될 함수에 넘겨줄 인자 // 마지막 인자에는 ThreadID를 받고 싶다면 unsigned int* 타입의 변수를 넣어두면 된다 uintptr_t _begin..

공부/운영체제 2022.01.22