스레딩이 완벽하게 작동하는 경우 'x'값의 최대 값은 15입니다.이 값은 모두 운영 체제의 스케줄러에 따라 다릅니다.
x의 초기 값이 0이라고 가정합니다. 스레드 A와 스레드 B가 직렬화됩니다. 스레드 B로가 x의 값은 지금 15
i | x
-------
0 | 7
1 | 9
2 | 11
3 | 13
4 | 15
최종 값 X를 수득 5 것이다 스레드 A 후, x의 값은 제
i | x
-------
0 | 1
1 | 2
2 | 3
3 | 4
4 | 5
것이다 완료 일은 일반적으로 이런 식으로 발생하지 않으며 스레드는 x의 초기 값을 읽고 그 값을 더한 다음 수정 된 값을 다시 메모리에 씁니다. 다음과 같은 일이 발생할 수 있습니다.
Thread A reads the value 'x' as 0
Thread B reads the value 'x' as 0
Thread A adds 1 to x making its local copy of x, 1
Thread B adds 2 to x making its local copy of x, 2
Thread A writes its modified value of x as 1
Thread B writes its modified value of x as 2 (overwriting Thread A's modification)
그러므로 x는 15를 넘지 않지만 스케줄러에 따라 적습니다.
Stackoverflow는 숙제를하는 사람들을 돕는 데 열렬한 경향이 있지만 그대로 태그를 지정하십시오. – gbtimmon
@gbtimmon - 사실, [숙제] 태그는 이제 쓸모가 없습니다. – ArjunShankar
@gbtimmon 숙제 태그가 사용되지 않으며 더 이상 사용되지 않습니다. – Joe