#include int sum = 0;void Add(){ for(int i = 0; i100만번 값을 더하고 빼는 함수를 2가지 방법으로 실행했다.함수를 호출하여 실행할 경우 0이 된다는 사실은 너무나도 당연하다.근데 스레드로 실행할 경우 sum은 항상 다른 값을 가진다.공유데이터(힙 영역, 데이터 영역)를 다룰 때 이와 같은 문제가 발생할 수 있다.여기서 sum은 전역 변수로 데이터 영역에 있어 두 스레드가 경합을 통해 접근하게 된다. sum++ 또는 sum--의 경우 코드상에서 1줄로 보이지만 어셈블리어를 확인해보면 아래와 같다.1줄이었던 코드가 컴파일이 되며 어셈블리어로 변환이 될 때 3줄이 되는 것을 볼 수 있다.이 때 어떤 스레드가 sum++을 실행하기 위해 메모리에서 데이터를 가져오고 연산을..