2012-12-17 4 views
3
function A(int a[]) 
{ 
SemLock() 

    //Some Code.... 

SemUnlock() 

} 

다른 스레드가 동일한 잠금을 사용했다고 가정합니다. 따라서이 기능은 차단됩니다. 이 함수가 다른 많은 스레드에 의해 호출된다고 가정하십시오. 모두 차단됩니다. 잠금 해제 후 데이터 (매개 변수 a [])가 손실되거나 다른 스레드에 의해 매개 변수로 전달됩니다. 이 데이터 대기열은 어떻게 발생합니까?세마포 잠금 큐잉 메커니즘?

답변

2

매개 변수 a[]은 스레드 특정 (공유 불가능)이므로 각 스레드는 자신의 a[] 사본을 갖습니다. 스레드가 만들어 질 때 스레드에 대한 데이터 구조가 생성됩니다. a[]은 스레드의 스택에 저장됩니다.

각 세마포어 변수와 관련된 스레드 큐가 있습니다.

typedef struct { 
int count; 
queue q; /* queue of threads waiting on this semaphore */ 
} Semaphore; 

[ANSWER]
a[] 상실하지 않을 것이다.

+0

[LINK] (http://www.mpi-sws.org/~druschel/courses/os/lectures/proc4.pdf)는 스레드에 대한 세마포어 작동 방식을 이해하는 데 도움이됩니다. –