본문 바로가기
CS 기초/Operating System

Lock 기반 알고리즘의 문제점

by woohyeon 2021. 9. 29.
반응형

lock-free란 키워드가 궁금해서 찾아보던 도중 알아두어야 할 내용인 것 같아 메모


공유 자원이 여러 스레드에 의해 점유되는 현상을 막기 위해 mutex나 semaphore를 이용하여 lock을 걸어 사용할 수 있다. 고성능이 요구되지 않는 환경에선 좋은 방법일 수 있지만, 고성능이 필요한 환경에선 좋은 방법이 아닐 수 있다.

어떤 스레드가 lock을 얻으면 다른 스레드들은 lock을 가진 스레드가 unlock을 할 때까지 해당 자원에 접근하지 못한다. unlock 이후 lock을 얻더라도 스케줄러에 의해 CPU를 할당받지 못하면 lock을 소유한 채로 기다려야 한다. 심지어 스케줄링 우선 순위가 밀리게 되면 해야하는 동작을 하지 않고 있음에도 lock을 소유하고 있고, 다른 스레드 들은 계속해서 대기 상태에 있게 된다.

 이는 lock에 대한 경쟁이 심해질수록 실제 필요한 작업 외에 동기화 작업에 소요되는 오버헤드가 많아지면서 결국 성능을 떨어뜨리게 된다.

 

참고

https://effectivesquid.tistory.com/entry/Lock-Free-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Non-Blocking-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

Lock Free 알고리즘(Non-Blocking 알고리즘)

 병렬 알고리즘과 관련해서 최근의 연구 결과를 보면 대부분이 Non-Blocking 알고리즘, 즉 여러 스레드가 동작하는 환경에서 데이터의 안정성을 보장하는 방법으로 락을 사용하는 대신 저수준의

effectivesquid.tistory.com

 

이건 별개로 슬랙방 사장님이 공유해주신 링크. 나중에 멀티스레드 공부할 때 한번 보자~

https://spiced-arthropod-3fa.notion.site/C-11-Memory-Model-Atomic-Lock-Free-c7301bf95cff4cce89060ae9d1ec5427

 

lock free

https://www.slideshare.net/ssuser278e05/lock-freealgorithm

 

LockFree Algorithm

Lock-Free Algorithm

www.slideshare.net

 




댓글