SpinLock
·
서버/공부
SpinLock멀티스레드 환경에서 동기화를 관리하기 위해 사용되는 락(잠금) 메커니즘공유 자원에 접근하려는 여러 스레드 중 하나만 접근하도록 보장하지만, 대기 중인 스레드가 CPU를 사용하면서 반복적으로 락 상태를 확인하는 방식 user level에서 발생하는 동기화방법 [동작 방식]1. 락이 풀려있다면 락을 획득하고, 자원을 사용. 락이 걸려 있다면, 다른 스레드가 락을 풀 때까지 계속 반복해서 락 상태 확인2. 스핀(반복), 락이 풀릴 때까지 기다리면서 반복적으로 상태를 확인하기 때문에 spinlock.3. 자원을 사용한 스레드는 락을 해제하여 다른 슬드가 자원에 접근할 수 있도록 함 [장점]: 시스템 호출을 통해 커널 모드로 전환하는  [[#Mutex Lock]]  에 비해 오버헤드가 적음  락이 ..
Mutex Lock
·
서버/공부
멀티 쓰레드 환경?: 일반적인 STL Container 문법은 멀티 쓰레드 환경에서 동작하지 않음1. vector : 메모리 동적할당 방식. 1. 문제 : 멀티 스레드 환경에서는 순서가 보장되지 않아, 메모리 공간을 삭제하거나 옮기는 과정에서 crash 발생, 메모리 손실 발생2. 해결법1 : vector.reserve()를 사용하면 메모리 공간을 삭제하거나 옮기는 일이 발생하지 않아서 crash는 나지 않지만, 메모리 손실 발생 3. 해결법2 : Lock사용2. volatile : 컴파일러에게 최적화를 하지 말아달라고 부탁int32 a = 0;a=1; a=2; a=3; a=4; cout : Debug모드가 아닌 Release모드(최적화 진행)로 빌드하면 a = 4만 남게 됨 volatile 키워드를 추..