Critical Section
·
DevSec
Critical Section임계 구역(Critical Section): 여러 프로세스 또는 스레드가 공유 자원에 접근하는 코드 구간 중에 동시에 실행되면 데이터 불일치가 발생할 수 있는 영역.Critical Section 보호여러 실행 흐름이 같은 변수, 파일, 자료구조, 장치 상태 등에 동시에 접근하면 Race Condition이 발생할 수 있다.이때 Critical Section 앞뒤에 Lock, Mutex, Semaphore, Spinlock 같은 동기화 기법을 배치해서 한 번에 하나의 실행 흐름만 공유 자원에 접근하도록 만들어야한다.int counter = 0;counter++;위의 C언어 코드는 단순히 counter 값을 1 증가시키는 코드처럼 보이는데 실제로는 메모리에서 값을 읽고, 레지스터..
Busy Waiting
·
DevSec
Busy Waiting?바쁜 대기(Busy Waiting)는 말그대로 CPU를 바쁘게 쓰면서 기다린다는 뜻이다.어떤 스레드에서 공유 자원을 쓰려할때 다른 스레드가 이미 락(Lock)을 쥐고 있을 때 Sleep 하는 대신 무한 루프를 돌면서 락이 풀렸는지 계속 확인하는 방식이다.예시 코드volatile int lock = 0;void critical_section(){ while (lock == 1) { } lock = 1; lock = 0;}이런식으로 구현된다.왜 씀?굳이 Sleep 시키지 않고 무한 루프를 돌면서 CPU를 낭비해가면서 이걸 쓰는 이유가 있다.속도가 빠르다: 조건이 만족되었을 때는 속도가 빠르다. 뮤텍스(Mutex)같은 방식은 락을 못 얻으면 Sleep시키고 락이 풀..