race condition
·
[ Laboratory ]/Advanced Operating System
multi threading 환경에서 두 개 이상의 스레드가 shared data 를 동시에 write 하면서 동기화되지 않은 상태일 때 프로그램 실행 결과가 interleaving (명령어 섞임)에 따라 달라지는 오류스레드는 addr space를 공유해서 여러 스레드가 code, heap, global variable 공유하기 때문에 동시에 접근 가능하다. 그러나 연산은 대부분 cpu에서 atomic하지 않고 변수에서 레지스터로 읽어오는 mov, 연산을 수행하는 add 등의 연산, 다시 결과를 변수에 쓰는 mov 총 3단계로 이루어진다. 그래서 특정 스레드의 작업 결과가 동기화되기 전에 접근해서 읽은 값으로 작업을 수행하면 업데이트가 정확하게 반영되지 않을 수 있다. lost update!!t1이 50..