2013-11-22 3 views
0

나는 그것이 일반적인 문제라고 생각합니다. 예를 들어, 나는 하나 개의 프로세스/스레드에 의해 수정 배열이 : 가끔 전체 배열을 인쇄 할 다른 프로세스/스레드가 있습니다잠그고 오랜 시간이 걸리는 작업

lock(); 
for(int i; i<array_size; i++) { 
    // find an item and do some operations 
} 
unlock(); 

, 그러나 그것은 "긴"시간이 걸릴 수 있습니다 :

lock() 
for(int i; i<array_size; i++) { 
    print(array[i]); 
} 
unlock(); 

전체 배열을 인쇄하는 더 좋은 방법이 있습니까?

답변

3

오랜 시간이 소요되는 인쇄 부분 인 경우 잠금 장치를 사용하여 배열 복사본을 가져 와서 잠금 장치를 풀고 배열 복사본을 인쇄 할 수 있습니다.

+0

이것은 fast-to-copy 형식의 작은 배열에 대해서는 확실히 가능하지만 인쇄하는 데 시간이 비슷하면 ... – arne

1

뮤텍스는 어떤 종류의 잠금 장치를 사용합니까? 또한 어레이의 개별 셀 사이에서 (1) 업데이트하고 (2) 인쇄 할 때 어떤 종류의 일관성을 기대합니까? 각 어레이 셀이 독립형 인 경우, 왜 단지 그 셀만을 담당하는 더 많은 로크가 존재하지 않는가?

좋아요;

배열의 의미는 세포가 서로 독립적으로하지 않습니다하지만 당신은 배열을 통해 원자의 일관성이 필요하다는 것을, 당신은 원래 글로벌 잠금 붙어되도록입니다 그러나 경우
mutex locks[array_size]; 
for (int i=0; i< mutex_size; i++) { 
    locks[i].lock(); 
    // do something or print content... 
    locks[i].unlock(); 
} 

.

그러나 여전히 배열을 잠그고 인쇄 할 수 있습니다. 인쇄를 기다릴 필요가없는 짧은 시간에 배열 잠금을 유지할 수 있습니다.

+0

배열 요소 간의 일관성이 중요하지 않으면'std :: atomic '배열 타입. – arne

관련 문제