3
function A(int a[])
{
SemLock()
//Some Code....
SemUnlock()
}
假設某個其他線程採用了相同的鎖定。因此該功能被阻止。假設這個函數被許多其他線程調用。所有將被阻止。解鎖後,數據(參數a [])是否會丟失或保留作爲參數由不同的線程傳入。這種數據排隊是如何發生的?信號量鎖定排隊機制?
function A(int a[])
{
SemLock()
//Some Code....
SemUnlock()
}
假設某個其他線程採用了相同的鎖定。因此該功能被阻止。假設這個函數被許多其他線程調用。所有將被阻止。解鎖後,數據(參數a [])是否會丟失或保留作爲參數由不同的線程傳入。這種數據排隊是如何發生的?信號量鎖定排隊機制?
參數a[]
是線程特定的(不可共享的),所以每個線程都有自己的副本a[]
。當一個線程創建了線程的數據結構時。 a[]
存儲在線程的堆棧中。
有一個與每個信號量變量關聯的線程隊列。
typedef struct {
int count;
queue q; /* queue of threads waiting on this semaphore */
} Semaphore;
[ANSWER]
a[]
不會損失。
這[LINK](http://www.mpi-sws.org/~druschel/courses/os/lectures/proc4.pdf)將有助於理解semaphore如何適用於線程。 –