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() }
他のスレッドが同じロックを取得したとします。したがって、この機能はブロックされています。この関数が他の多くのスレッドによって呼び出されたとします。すべてブロックされます。ロック解除後、データ (パラメーター a[]) は失われるか、別のスレッドによってパラメーターとして渡されて保持されます。このデータのキューイングはどのように行われるのでしょうか?
パラメータa[]はスレッド固有 (共有不可) であるため、各スレッドには独自の のコピーがありa[]ます。スレッドが作成されると、スレッドのデータ構造が作成されます。a[]スレッドのスタックに格納されます。
a[]
各セマフォ変数に関連付けられたスレッドのキューがあります。
typedef struct { int count; queue q; /* queue of threads waiting on this semaphore */ } Semaphore;
【回答】 a[]損はしません。