Volatile
CPU는 최적화를 위해 이미 캐싱한 볏누에 대해서는 메모리까지 다녀오지 않는다.
그러나 멀티 스레드에서는 위의 경우 문제를 발생시키게 된다.
A 스레드의 캐시에 변수가 있는데, B 스레드가 변수의 값을 바꾼 경우 A스레드는 올바른 변수의 값을 알기 위해서는 반드시 메모리까지 다녀와야만 한다.
이렇게 '반드시 메모리에서 읽어올 것' 이라고 명시해주는 키워드가 바로 Volatile이다.
Lock
Lock으로 감싸여진 구간은 락을 획득해야 진입 가능하다(무조건 하나의 스레드만 들어갈 수 있다.)
즉, 스레드끼리 접근 순서가 지켜진다는 의미이다.
보통 자료구조나 알고리즘의 동작에 있어 여러 스레드의 접근을 허용하고 싶지 않은 경우 사용하며, 변수 하나의 값을 보호하기 위해서는 Lock 보다는 (C++ 11의 경우)atomic을 사용한다.
'devops' 카테고리의 다른 글
| [Redis] Redis Sentinel + HAproxy (0) | 2021.08.08 | 
|---|---|
| [Docker] Jenkins & fabric (0) | 2021.07.25 | 
| MQTT/AMQP (0) | 2021.06.18 | 
| ASP.Net Core에서 NSwag 사용하기 (0) | 2021.02.14 | 
| Dapper.Net - a simple object mapper for .Net (0) | 2020.12.16 |