아래 설명 되는 유저모드 동기화(또는 유사한것) 외에는  커널모드 동기화가 되겠지요

 

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

+ Recent posts