2013-10-07 2 views
0

x가 0이 될 때까지 초기화되면 다음 두 개의 루프가 두 개의 다른 프로세스에서 동시에 실행 된 후 x의 가능한 값은 무엇입니까? 여기에 일어날 수있는 일 (각 과정의 하나)동시에 공유 변수를 증가 및 감소

for (i = 0; i < 5; i++) 
    x++ 

for (j = 0; j < 5; j++) 
    x-- 

(편집)? 모든 명령이 실패하거나 결과가 항상 x = 0이 될 수 있습니까?

답변

1

잠금 코드가 없으므로 교착 상태가 발생하는 이유는 없습니다. i와 j의 다른 값은 스레드 실행의 비 결정적 순서에 따라 다릅니다. 첫 번째 스레드가 시작되고 i = 4로 멈춘 다음 두 번째 스레드가 시작되고 i를 0으로 초기화하고 첫 번째 및 두 번째 루프의 끝까지 진행한다고 가정 해보십시오. 두 번째 스레드는 i = 6 (이전 스레드에서 남은 값)으로 첫 번째 루프에서 즉시 다시 시작하여 종료 한 다음 두 번째 루프에서 정상적으로 진행합니다. 이것은 한 가지 시나리오에 불과합니다. 비슷한 것들을 생각해 낼 수 있으며 가능성은 무한합니다.

+0

잘못된 단어를 사용했을 수 있습니다. 나는 무엇이 잘못 될 수 있는지 물어야했다. – rcj