12.07.2015 Views

RedHawk Linux User's Guide version 6.3 日本語版

RedHawk Linux User's Guide version 6.3 日本語版

RedHawk Linux User's Guide version 6.3 日本語版

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

プロセス 間 同 期同 様 に 生 産 者 がメールボックスにデータを 収 納 することを 可 能 にする 関 数 は 以 下 のように 定 義 することが 可 能 です:voidproduce (box, data)struct mailbox *box;any_t data;{spin_acquire (&box–>mx, &rv);enqueue (box–>data, data);if (box–>consumer == empty)spin_release (&box–>mx, &rv);else {global_lwpid_t id = dequeue (box–>consumers);spin_unlock (&box->mx);server_wake1 (id, &rv);}}この 関 数 では、 生 産 者 プロセスは 新 しいデータを 挿 入 する 前 にメールボックスが 空 になるのを 待ちます。 生 産 者 は 消 費 者 が 待 機 している 時 のみデータの 到 着 を 通 知 、これはメールボックスをアンロックした 後 にそうすることに 注 意 して 下 さい。 起 き 上 がった 消 費 者 はデータのチェックおよび 削 除 のためにメールボックスをロックする 可 能 性 があるため、 生 産 者 は 最 初 にメールボックスをアンロックする 必 要 があります。server_wake1の 呼 び 出 しの 前 にメールボックスをアンロックすることもやはり 相 互 排 除 を 短 時 間 保 持 することを 確 実 にします。 不 必 要 なコンテキスト・スイッチを 回 避遪 するため、 再 スケジューリングは 消 費 者 が 起 こされるまで 無 効 にします。5-43

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!