
전체 글

[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..

[SERVER] Thread
1. Thread 1.1 Thread - CPU 코어에서 돌아가는 프로그램 단위를 쓰레드(Thread) 라고 부름 - CPU 의 코어 하나에서는 한 번에 한 개의 쓰레드의 명령을 실행 1.2 Process - 운영체제에서 실행되는 프로그램의 최소 단위이며 여러 개의 쓰레드로 이루어 지고 있음 - 프로세스와 쓰레드의 차이는 메모리를 공유하느냐 하지 않느냐의 차이 1.3 Context Switching - 각 코어에서는 코어가 돌아가는데 컨텍스트 스위칭을 통해 쓰레드가 번갈아가며 실행 - 컴퓨터에서 프로그램이 실행 - 겉으로 보기에는 프로그램이 연속적으로 쭈르륵 작동하는 것 처럼 보이지만 실제로는 X - 아래 표을 보면 CPU 코어 하나에서 프로그램들이 어떻게 실행되는지 알 수 있음 게임1 음악1 인터넷1 ..