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如何适用于线程。 –