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

  //Some Code....

SemUnlock()

}

他のスレッドが同じロックを取得したとします。したがって、この機能はブロックされています。この関数が他の多くのスレッドによって呼び出されたとします。すべてブロックされます。ロック解除後、データ (パラメーター a[]) は失われるか、別のスレッドによってパラメーターとして渡されて保持されます。このデータのキューイングはどのように行われるのでしょうか?

4

1 に答える 1

2

パラメータa[]はスレッド固有 (共有不可) であるため、各スレッドには独自の のコピーがありa[]ます。スレッドが作成されると、スレッドのデータ構造が作成されます。a[]スレッドのスタックに格納されます。

各セマフォ変数に関連付けられたスレッドのキューがあります。

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

【回答】
a[]損はしません。

于 2012-12-17T05:55:18.570 に答える