아래 설명 되는 유저모드 동기화(또는 유사한것) 외에는 커널모드 동기화가 되겠지요
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
반응형
'운영체제 & 병렬처리 > Multithread' 카테고리의 다른 글
Reader-Writer lock (0) | 2022.10.02 |
---|---|
std::this_thread::yield 스케줄러에게 지연 힌트를 줌 (0) | 2022.09.28 |
Threadmanager (0) | 2022.09.27 |
Lock-Free Queue (0) | 2022.09.26 |
atomic 가시성, 원자성 (0) | 2022.09.24 |