2012-12-17 112 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)將有助於理解semaphore如何適用於線程。 –