信号量锁定排队机制?

时间:2012-12-17 05:47:34

标签: c locking queue semaphore

function A(int a[])
{
SemLock()

  //Some Code....

SemUnlock()

}

假设某个其他线程采用了相同的锁定。因此该功能被阻止。假设许多其他线程调用此函数。一切都将被阻止。解锁后,数据(参数a [])是否会丢失或保留作为参数通过不同的线程传入。如何进行数据排队?

1 个答案:

答案 0 :(得分:2)

参数a[]是特定于线程的(不可共享),因此每个线程都有自己的a[]副本。当线程创建线程的数据结构时。 a[]存储在线程的堆栈中。

有一个与每个信号量变量关联的线程队列。

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

[ANSWER]
a[]不会丢失。