Thread-safe란
Thread-safe를 위해 어떻게 해야하는가?
상호배제(Mutual Exclusion) 원칙 : 공유 데이터에 대해 스레드/프로세스의 동시 접근을 막는 것
뮤텍스(Mutual Exclusion) :한 스레드/프로세스가 임계 영역에 있으면, 다른 스레드/프로세스가 못들어오도록 막는 것
(방에 들어가기 위한 열쇠의 개수 → 한 사람이 빈 방에 대한 열쇠를 갖고 있어서, 방에 들어간다면 그 사람이 나와야만 다른 사람이 열쇠를 건네받아 방에 들어갈 수 있음)
세마포어(Semaphore) : 현재 공유 자원에 접근할 수 있는 스레드/프로세스의 수를 나타내는 값을 두어 상호배제를 하는 방법
(빈 방의 열쇠의 개수 → 방에 네 개면 열쇠도 네 개일 것이고, 한 사람이 들어갈 때마다 들어갈 수 있는 방은 하나씩 줄어들어 0개가 되면 빈 방이 날 때까지 기다려야 한다는 것)
→ P와 V 모두 원자성을 만족해야 한다. 다시 말해, 한 프로세스(또는 스레드)에서 세마포어 값을 변경하는 동안 다른 프로세스가 동시에 이 값을 변경해서는 안 된다.
→ 세마포어의 바이너리 값을 갖는 것이 뮤텍스임