목록GameDev/NetworkProgramming (4)
코가손의 블로그
Condition Variable은 조건을 확인하여 Lock을 잡을지의 여부를 결정한다. Event는 커널 오브젝트 condition_variable은 유저 오브젝트라는 차이가 있다. C++11의 표준이니 왠만하면 Event방식보단 condition_variable방식을 사용하는 것이 좋다. condition_variable을 사용하는 전형적인 단계를 보자면 이렇다. 1) Lock을 잡는다. 2) 공유 변수 값을 수정한다. 3) Lock을 푼다. 4) 조건변수를 통해 다른 쓰레드에게 통지한다. 1) Lock을 잡고 2) 조건 확인, 만족한다면 빠져 나와서 이어서 코드를 진행한다. 아니라면 Lock을 풀어주고 대기상태로 전환한다. mutex m; queue q; condition_variable cv; v..
mutex m; queue q; void Producer() { while (true) { { unique_lock lock(m); q.push_back(100); } this_thread::sleep_for(10000000ms); } } void Consumer() { while (true) { unique_lock lock(m); if (q.empty() == false) { int data = q.front(); q.pop(); cout
Race Condition 두 개 이상의 스레드들이 공유 자원(*임계영역)에 접근하려고 할 때 동기화 매커니즘 없이 접근하려고 경쟁 하는 상황을 Race Condition이라고 한다. Race Condition인 경우, 스레드의 실행 순서를 잘 조절해주지 않으면 이상한 상태, 비정상적인 결과가 발생할 수 있다. 이 문제는 항상 발생하는 것이 아니라 특정한 순서로 수행되었을 때만 발생하여 더욱 문제점을 찾기 어렵다. 그래서 멀티스레드 프로그래밍을 할 경우 특히 동기화 문제를 정말 잘 해결해야 한다. *임계영역 : 공유되는 자원, 문제가 발생하지 않도록 독점을 보장해주어야 하는 영역 동시접근을 해결하기 위한 방법으로 lock, semaphore, monitor, 메시지를 이용한 기법 이 있다. mutex와 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bgc3ov/btrorP1yy1F/57sCGCMSO4JI0x0WOzkMB0/img.jpg)
우선 데이터를 전송하기 위해 사용하는 프로토콜을 알아보겠다 전송층은 OSI모델의 4계층 TCP/IP모델의 3계층에 존재한다. TCP 연결형 서비스 가상회선 방식 제공, 신뢰성 높음 3-way handshake 이용해 연결 설정, 4-way handshaking을 통해 해제 IP는 데이터전송 처리, TCP는 패킷 추적 및 관리 흐름 및 혼잡 제어 UDP보다 속도 느림 서버 소켓은 연결만 담당 서버와 클라이언트 1대1 연결 스트림 전송으로 데이터 크기 무제한 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모)성능 낮음 Streaming 서비스에 불리함(손실된 경우 재전송 요청하므로) 용어 정리 및 부연설명 3-way Handshake TCP/IP 프로토콜을 이용하는 프로그..