https://velog.io/@cedongne/Server-Lock-free
1.lock free
여러개의 쓰레드에서 동시에 호출했을 때에도 정해진 단위마다 적어도 한개의 호출이 완료되는 알고리즘
멀티쓰레드 환경에서 다른 쓰레드가 플래그를 세팅해주고, lock을 풀어주는 등 다른 쓰레드가 끝나고 자기 순서가 오기를 기다리지 않는 non-blocking이 보장되어야 lock-free가 될 수 있음
특정 작업을 동시에 여러 쓰레드가 호출했을 때 적어도 하나는 완료해서 반환하는 것.
그 알고리즘을 queue로 구현한 것이 lock free queue.
https://velog.io/@codingskynet/C11-Memory-Model-Atomic%EB%B6%80%ED%84%B0-Lock-Free-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EA%B9%8C%EC%A7%80
2.Atomic 메모리 모델
멀티코어적으로 프로그램을 실행하고자 할 때(동시성 프로그래밍) 하나의 변수에 두 개의 쓰레드가 1000번씩 +1해줄 때
실제론 2000이 나오지 않고 더 작거나 같은 수가 나옴
이유: 우리가 예상하는 것과 달리 각 쓰레드에서 count값을 읽어오는 과정에서 그 과정이 씹히기 때문에
이러한 상황을 막기 위해 쪼갤 수 없는 가장 단위로 과정을 쪼개지 않아 2000이 나오게 하는 것
https://wannabe-gosu.tistory.com/29
3.ABA
Lock free 알고리즘같은 것을 구현할 때 CAS(Compare And Swap)을 사용해서 자료구조의 아이템 변경할 때
포인터가 시스템에 의해 재사용되면서 생기는 문제
해결 방법으로는 double check CAS 등이 있다.
'CS > 운영체제' 카테고리의 다른 글
입출력 (콘솔입출력, 파일입출력) (1) | 2024.01.24 |
---|---|
IOCP (0) | 2024.01.09 |
도커와 컨테이너의 이해 (0) | 2023.12.20 |
대칭키 vs 비대칭키 (1) | 2023.12.20 |
프로세스가 메모리에 올라가는 방법 (+가상메모리 + 프로그램/프로세스 차이) (0) | 2023.12.18 |