SpinLock
-
C++ SpinLock구현C++/C++ 멀티스레드 2022. 10. 9. 13:44
SpinLock은 앞선 포스팅에서 말한 존버메타 lock이다. 즉, lock을 다른 스레드가 사용중이면, 그 앞에서 lock이 풀릴때까지 계속 기다리는 것이다. 이거를 한 번 구현해보자. 들어가기에 앞서, 멀티스레드 프로그래밍을 할 때는, 내가 작성한 코드를 여러 스레드가 동시에 실행한다는 것을 잊지 말아야 한다. 그러지 않으면, 왜 에러가 나는지, 왜 코드가 내가 생각한대로 되지않는지 이해하기 어려워진다. #include #include #include #include class SpinLock { public: void lock() { while(_locked){} _locked = true; } void unlock() { _locked = false; } private: bool _locked =..
-
멀티스레드 Lock구현C++/C++ 멀티스레드 2022. 10. 9. 11:21
C++에서 기본적으로 제공하는 mutex, lock_guard 등을 활용하여 멀티스레드 프로그래밍이 가능하지만, 이것들이 어떻게 구현이 되었는지 간소하게나마 알아보고 직접 구현해보려 한다. lock은 기본적으로 lock상태와 unlock상태가 있다. lock상태라면, 다른 스레드가 lock을 갖지 못하고, unlock상태라면 선착순으로 하나의 스레드에게 lock을 제공할 수 있어야 한다. 그러면 어떤 스레드가 lock을 갖고 사용하고 있을 때 다른 스레드는 lock이 필요로 한다면 어떻게 해야하는가? 저번에는 화장실을 예로 들었지만, 이번에는 헬스장을 예로 들어 보겠다. 나는 헬스를 시작한지 1년정도 되었다. 헬스장에는 피크타임이 있다. 피크타임에 가면, 인기있는 헬스기구들(랫풀다운, 벤치프레스, 스쿼트..