Create Game
[SERVER] Dead Lock
1. Dead Lock 1.1 Dead Lock void worker1(int& counter, std::mutex& m1, std::mutex& m2) { for (int i = 0; i < 10000; i++) { std::lock_guard lock1(m1); std::lock_guard lock2(m2); counter++; } } void worker2(int& counter, std::mutex& m1, std::mutex& m2) { for (int i = 0; i < 10000; i++) { std::lock_guard lock1(m2); std::lock_guard lock2(m1); counter++; } } int main() { vector workers; std::mutex m1;..
[SERVER] MUTEX
1. Mutex 1.1 Race Condition - 여러 쓰레드에서 동시에 실행시켰으므로 한 번에 한 쓰레드에서만 코드를 실행시키는 방법 - Race Condition을 해결할 수 있는 Mutex 사용 1.2 Mutex - 상호 배제(mutual exclusion) - Lock - 한 번에 한 쓰레드에서만 mutex의 사용 권한을 갖는 것 - mutex를 소유한 쓰레드가 unlock을 통해 mutex를 반환할 때까지 무한정 대기상태 - UnLock - 위에서 말했듯이 mutex를 반환할 때까지 무한정 대기상태 - unlock을 하지 않는 경우 본인도 본인을 기다리고 다른 쓰레드들도 unlock할때까지 기다리게 됨 - 아무도 연산을 진행X → 데드락(deadlock) 상태 void worker(int& ..
[SERVER] Race Condition
1. Race Condition - 서로 다른 쓰레드에서 같은 메모리를 공유할 때 발생할 수 있는 문제 - 서로 다른 쓰레드들이 동일한 자원을 사용할 때 발생하는 문제를 경쟁 상태 1.1 Thread - 서로 다른 쓰레드들에서 counter 라는 변수의 값을 1 씩 계속 증가시키는 연산을 수행 void worker(int& counter) { for (int i =0; i < 10000; i++) counter++; } int main() { vector workers; int counter = 0; // ref - 레퍼런스로 전달하려면 ref 함수로 감싸야 함 for (int i = 0; i < 2; i++) workers.push_back(std::thread(worker, std::ref(count..