2012-06-20 2 views
1

i는 값 5를 갖는 전역 변수이고 함수 v()는 세 개의 스레드에 의해 호출됩니다.Un-sysnchronized 스레드의 출력을 예측하십시오.

v() 
{ 
    i++; 
    i--; 
} 

스레드가 동기화되지 않습니다.
무엇입니까? 가능한 결과의 i 그리고 그것들은 무엇입니까? i++이 하나의 문이 (동일 i--에 대한 보유) 및 i++i--는, 결과는 항상 i=5 인 문장의 순서대로이기 때문에

답변

0

출력은 항상 i=5 될 것입니다. 당신이 int tmp = i; i = tmp + 1; 대신 i++이있는 경우 하나의 문이 아닌 i≠5int tmp = i; i = tmp + 1; 때문에

, 당신은 할 수 있습니다.

여기서 두 개의 스레드 (라는 및 B) 모든 가능성은 :

 | i = 5 
A: i++ | i = 6 
A: i-- | i = 5 
B: i++ | i = 6 
B: i-- | i = 5 

     | i = 5 
A: i++ | i = 6 
B: i++ | i = 7 
A: i-- | i = 6 
B: i-- | i = 5 

     | i = 5 
A: i++ | i = 6 
B: i++ | i = 7 
B: i-- | i = 6 
A: i-- | i = 5 
+0

제가 ++ executiong 펼쳐진 스레드 선점 및 두번째 쓰레드가 실행을 시작한다면 무엇? –

+0

내 답변에 모든 가능성을 추가했습니다 (2 개의 스레드의 경우 5 개의 스레드에 대해 동일 함). – Thomash

+0

세 스레드의 경우, 나는 모든 경우에 5,6,7,8 중에서 하나를 계산합니다. 희망이 맞아. –

관련 문제