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