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.

プロセス 間 同 期もし 呼 び 出 し 元 プロセスまたはスレッドがスピンロックのロックに 成 功 した 場 合 、spin_trylockはtrue を 返 し、もし 成 功 しなかった 場 合 はfalse を 返 します。spin_trylockは 呼 び 出 し 元 プロセスまたはスレッドをブロックしません。このインターフェースは 以 下 のように 指 定 されます:#include int spin_trylock(spin_mutex_t *m);もし 指 定 されたスピンロックがロックされている 場 合 、spin_islockはtrue を 返 します。もしアンロックされている 場 合 はfalse が 返 します。これはスピンロックをロックしません。このインターフェースは 以 下 のように 指 定 されます:#include int spin_islock(spin_mutex_t *m);spin_unlockはスピンロックをアンロックします。これは 値 を 返 しません。このインターフェースは 以 下 のように 指 定 されます:#include void spin_unlock(spin_mutex_t *m);spin_lock, spin_trylock, spin_unlockはNightTrace RTで 監 視 するためにトレース・イベントを 記録 することが 可 能 です。アプリケーションはより 前 にSPIN_TRACEを 定 義 することにより、これらのトレース・イベントを 有 効 にすることが 可 能 です。 例 :#define SPIN_TRACE#include spin_mutexツールの 適遚 用 5もし-lpthreadがリンクされる 場 合 、アプリケーションは-lntraceもしく-lntrace_thrもリンクされる 必 要 があります。これらのインターフェースの 使 用 に 関 する 更 なる 情 報 は、spin_init(3)のmanページを 参 照 してください。ビジーウェイト 相 互 排 他 のためのspin_mutex ツールの 使 用 手 順 は、 以 下 のコードの 断 片 で 説 明 します。 最 初 の 部邪 分 は、スピンロックを 取 得 するために 再 スケジューリング 制 御 と 一 緒 にこれらのツールを 使 用 する 方 法 を 示 し、 次 頁 はスピンロックを 開 放 する 方 法 を 示 します。これらのコードの 断 片 にシステムコールもプロシージャコールも 含 まれていないことに 注 意 してください。_m 引 数 はスピンロックを 指 し、 引 数 は 呼 び 出 し 元 プロセスもしくはスレッドの 再 スケジューリング 変 数 を 指 します。これはスピンロックが 共 有 メモリ 内 にあることを 前 提 としています。ページングやスワッピングに 関 連連 するオーバーヘッドを 回 避遪 するため、クリティカル・セクション 内部邪 で 参 照 されるページは 物 理 メモリにロックすることを 推 奨 します。(mlock(2) およびshmctl(2)システムコールを 参 照 してください)#define spin_acquire(_m,_r) ¥{ ¥resched_lock(_r); ¥while (!spin_trylock(_m)) { ¥resched_unlock(_r); ¥while (spin_islock(_m)); ¥resched_lock(_r); ¥} ¥}5-9

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

Saved successfully!

Ooh no, something went wrong!