RedHawk Linux User's Guide version 6.3 æ¥æ¬èªç
RedHawk Linux User's Guide version 6.3 æ¥æ¬èªç
RedHawk Linux User's Guide version 6.3 æ¥æ¬èªç
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