Oracle® Solaris 11.2 デバイスドライバの記述

印刷ビューの終了

更新: 2014 年 9 月
 
 

相互排他ロック

相互排他ロック (mutex) は通常、データの集合と関連付けられ、そのデータへのアクセスを制御します。mutex は、ある時点で 1 つのスレッドのみがそのデータにアクセスできるようにする手段を提供します。mutex 関数には次のものがあります。

mutex_destroy(9F)

関連付けられたストレージを解放します。

mutex_enter(9F)

mutex を取得します。

mutex_exit(9F)

mutex を解放します。

mutex_init(9F)

mutex を初期化します。

mutex_owned(9F)

mutex が現在のスレッドによって保持されているかどうかを評価します。ASSERT(9F) でのみ使用します。

mutex_tryenter(9F)

利用可能な場合に mutex を取得しますが、ブロックはしません。

mutex の設定

デバイスドライバは通常、ドライバデータ構造ごとに mutex を割り当てます。一般に mutex は、kmutex_t 型の構造体のフィールドです。使用する mutex を準備するために mutex_init(9F) が呼び出されます。この呼び出しは通常、デバイスごとの mutex については attach(9E) の時点で、グローバルドライバ mutex については _init(9E) の時点で行われます。

次に例を示します。

struct xxstate *xsp;
/* ... */
mutex_init(&xsp->mu, NULL, MUTEX_DRIVER, NULL);
/* ... */

mutex 初期化のより完全な例については、Chapter 6, Driver Autoconfigurationを参照してください。

ドライバはアンロードされる前に mutex_destroy(9F) を使用して mutex を破棄する必要があります。mutex の破棄は通常、デバイスごとの mutex については detach(9E) の時点で、グローバルドライバ mutex については _fini(9E) の時点で行われます。

mutex の使用

共有データ構造を読み書きする必要があるドライバコードのすべてのセクションで、次のタスクを実行する必要があります。

  • mutex の取得

  • データへのアクセス

  • mutex の解放

mutex のスコープ、つまり mutex が保護するデータはすべてプログラマが管理します。mutex によってデータ構造が保護されるのは、データ構造にアクセスするすべてのコードパスが、mutex の保持中にデータにアクセスする場合に限られます。