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

  //Some Code....

SemUnlock()

}

假设其他一些线程已经获取了相同的锁。因此,此功能被阻止。假设这个函数被许多其他线程调用。都会被屏蔽。Unlocking后,不同线程作为参数传入的数据(参数a[])会丢失还是保留。这种数据排队是如何发生的?

4

1 回答 1

2

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

每个信号量变量都有一个线程队列。

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

[ANSWER]
a[]不会丢失。

于 2012-12-17T05:55:18.570 回答