가시성: 각 코어들은 캐시를 가지고 있는데, 공유 변수의 값을 메모리에 저장 안하고 자기 캐시에만 저장해놓았을 수도 있고, 각 캐시마다 변수의 값이 다르게 저장되있을 수도 있음. 코드 재배치: cpu나 컴파일러의 최적화 이슈로 코드가 재배치됨. fetch -> decode -> execute -> write back 각각 데이터 가져오기, 데이터 해석, 실행, 저장을 의미한다. int x = 0; int y = 0; int r1 = 0; int r2 = 0;일 때, 쓰레드 1이 x = 1; r2 = y;를 실행하고, 쓰레드 2가 y = 1; r1 = x;를 실행할 때, 계속 실행하다보면 x = 0과 y = 0이 결과값으로 나올 수 있다. (가시성과 코드 재배치의 이슈) 쓰레드 1에서 x는 1이지만, 자..