C++
-
멀티스레드 Lock구현C++/C++ 멀티스레드 2022. 10. 9. 11:21
C++에서 기본적으로 제공하는 mutex, lock_guard 등을 활용하여 멀티스레드 프로그래밍이 가능하지만, 이것들이 어떻게 구현이 되었는지 간소하게나마 알아보고 직접 구현해보려 한다. lock은 기본적으로 lock상태와 unlock상태가 있다. lock상태라면, 다른 스레드가 lock을 갖지 못하고, unlock상태라면 선착순으로 하나의 스레드에게 lock을 제공할 수 있어야 한다. 그러면 어떤 스레드가 lock을 갖고 사용하고 있을 때 다른 스레드는 lock이 필요로 한다면 어떻게 해야하는가? 저번에는 화장실을 예로 들었지만, 이번에는 헬스장을 예로 들어 보겠다. 나는 헬스를 시작한지 1년정도 되었다. 헬스장에는 피크타임이 있다. 피크타임에 가면, 인기있는 헬스기구들(랫풀다운, 벤치프레스, 스쿼트..
-
C++, 멀티스레드 교착상태(DeadLock)C++/C++ 멀티스레드 2022. 10. 8. 11:06
DeadLock은 멀티스레드 프로그래밍을 할 때 만나게 되는 대표적인 문제점 중 하나이다. DeadLock의 개념부터 알아보고 넘어가자. 각각의 스레드가 Lock을 갖고 있는데, Lock을 놓기 위해서는 다른 스레드의 Lock이 필요한 상황 을 DeadLock이라고 할 수 있을 것 같다. 사실 잘 와닿지 않을 수 있다. 적절한 예시가 될지 모르겠지만 데드락을 배우다보니 이런 상황이 생각이 났다. 고등학교를 다닐 때 우리 반 선생님은 엄한 사람이였다. 체벌이 있던 시절이다 보니, 야간자율학습을 하지 않고 도망가면 다음날에 적어도 3대씩은 맞았다. 기분에 따라서 5대까지 늘어나기도 했다. 하지만 나는 야간자율학습을 성실히 하던 학생이 아니였다. 항상 저녁을 먹고 학교에 올라와서 친구들과 도망갈까말까에 대한 ..