운영체제 & 병렬처리/Multithread
제프리 리처의 유저모드 동기화들
3DMP
2022. 9. 28. 03:47
아래 설명 되는 유저모드 동기화(또는 유사한것) 외에는 커널모드 동기화가 되겠지요
1. 원자적 접근 : Interlocked 함수들
2. 캐시 라인( 유저 모드 동기화라기 보단.. 캐시 히트를 높이자, 가시성에 주의 할것)
3. 건너 띔
4. Critical Section
5. Slim Reader Writer lock
6. Condition Variable
InterlockedExchaged 는 스핀락을 구현해야 하는 경우에 유용하게 사용 될 수 있다
유저모드 동기화 : atomic , interlock..., Critical Section, (Slim) Reader-Wirter lock, condition variable
캐시 미스가 적게 일어나도록 신경 써야 한다
다른 캐쉬에 있는걸 인지하지 못한다는 것인데 c++ atomic 을 사용하면 이문제를 해결 할 수 있다
SRW (슬림 리더-라이터 락 )
read 를 주로 하는 구조에서 어쩌다 데이터를 한번 쓸때
ex) 운영 툴로 고정 데이터를 어쩌다가 한번 변경 줘야 할때
하지만 주의할것은 크리티컬 섹션과 다르게 한 스레드가 여러번 락을 걸 수 없다
Tip
락을 장시간 점유하지 말 것!
장시간 작업이 필요할 땐 리소스를 복사해서 사용
ref : https://www.slideshare.net/hiscale/120128-windows-viacpp8
반응형