2013-11-01 4 views
0

내가 시험을했고 나는 시험이 질문에 직면 : 아래의 문장 각각에 대해운영 체제와 동시 스레드

는 문이 참 또는 거짓, 그리고 왜 한 문장에 있는지 여부를 나타냅니다. • 미리 프로그래밍되지 않은 예약 된 스레드 (즉, 비 의도적 컨텍스트 스위치 없음)를 제공하는 동시 프로그래밍 환경에서 상호 배제 동기화가 필요하지 않습니다.

시험 후 나는 대답을 얻었습니다 :

[거짓. 이중 프로세서에서는 여전히 뮤텍스 동기화 (1)가 필요하고 (2) 블로킹 작업이 포함 된 중요 섹션에 대해서는 유니 프로세서 에 있습니다.]

그러나 참을 수는 없습니다. 누구든지 명확하게 설명 할 수 있습니까? 멀티 프로세서 시스템의 경우

답변

2

, 당신은 변수들, 예를 들어 동시에 실행이 작업이 공유 :

s = 1; 
T1 reads s1 = 1; 
T2 reads s2 = 1; 
T1 increments s1: s1 = 2; 
T2 increments s2: s2 = 2; 
T1 writes s: s = s1 = 2; 
T2 writes s: s = s2 = 2; 

그러나 두 가지 작업이 하나 그것을 증가로들, 지금 3해야한다. 이를 방지하려면 다른 작업이 변수를 읽기 전에 변수를 읽고 조작하고 쓰도록해야합니다.

T1 reads s; 
T1 blocks on an operation; 
T2 runs and reads s; 
T2 blocks on an operation; 
T1 manipulates and writes; 
T2 manipulates and writes; 

의 두 번 조작했지만, 결과는 T2의 조작을 보여줍니다 단일 프로세서 시스템에서

는 같은 발생할 수 있습니다.

단일 변수 만 변경하면 원자 연산을 사용할 수 있습니다. 그러나 크리티컬 섹션이 크다면 뮤텍스를 사용하여 보호해야합니다.

+0

감사합니다.하지만 예약되지 않은 스레드를 사용할 때 T1을 차단할 수 있습니까? –

+0

non-preemptive는 스케줄러가 스레드를 중지 할 수없고 다른 스레드가 작동하도록 할 수 없음을 의미합니다. 따라서 스레드는 자발적으로 차단할 수 있습니다. 그러나 하드 드라이브에서 읽는 것과 같은 작업은 스레드도 차단합니다. 요청을 기다리는 동안 다른 스레드가 끝내기도합니다. – Philipp

관련 문제