2017-10-22 5 views
0

코드가 중요 섹션에서 상호 배타적임을 어떻게 알 수 있습니까? 개념을 이해하지만 코드 추적에 관해서는 상호 배타적 인 코드를 식별하는 데 어려움을 겪고 있습니다. 문제의 코드 세그먼트를 ...상호 독점 코드

// flag[0] and [1] start as true 

Thread 1 
for(;;) { 
    flag[1] = false; 
    while(flag[2] == false) 
     flag[1] = true; 
    flag[1] = false; 
    // critical section 
    flag[1] = true; 
    // exit critical 
} 

Thread 2 
for(;;) { 
    flag[2] = false; 

    while(flag[1] == false); 

    // critical section 
    flag[2] = true; 
    // exit critical 
} 

이것은 상호 배제에 대한 일반적인 통찰력을 높이 평가합니다. 당신이 코드를 탐색 할 때

답변

0

나는 경험적으로 상호 배타적 인 코드

를 식별하는 힘든 시간을 보내고있어, 이러한 생각에 의해 상호 배타적 인 코드 (일명 임계 영역)을 발견 할 수 있습니다 질문 :

  1. 공개적으로 액세스 할 수있는 데이터가 있습니까 (데이터는 모든 것 : 객체, 표준 컨테이너 등)?
  2. 누구에게 액세스 할 수 있습니까?
  3. 내가 액세스하는 동안 액세스 할 수 있습니까?

이 모든 질문에 대한 대답은 '예경우, 당신은 아마 알아서 동기화 메커니즘의 일종을 사용하여이 데이터를 보호해야합니다.

원시 유형의 경우 가장 간단한 방법은 원자 변수입니다.

더 복잡한 유형의 경우. 어떤 종류의 컨테이너라면 mutex를 사용해야 할 것이다.

드라이버, 인터럽트 등의 더 복잡한 시나리오의 경우 스핀 록 및 읽기 - 쓰기 잠금 및 고급 메커니즘에 대해 자세히 읽어야합니다.

참고 :이 문제는 지나치게 단순화되어 있지만이 복잡한 문제를 해결하기 시작한 사람에게는 상당히 좋은 그림이됩니다.