Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
function A(int a[]) { SemLock() //Some Code.... SemUnlock() }
假设其他一些线程已经获取了相同的锁。因此,此功能被阻止。假设这个函数被许多其他线程调用。都会被屏蔽。Unlocking后,不同线程作为参数传入的数据(参数a[])会丢失还是保留。这种数据排队是如何发生的?
参数a[]是线程特定的(不可共享),因此每个线程都有自己的a[]. 当一个线程创建了一个线程的数据结构。a[]存储在线程的堆栈中。
a[]
每个信号量变量都有一个线程队列。
typedef struct { int count; queue q; /* queue of threads waiting on this semaphore */ } Semaphore;
[ANSWER] a[]不会丢失。