4.3. mutex オプション


手順4.1 標準のミューテックス作成

相互除外 (mutex) アルゴリズムは、共通のリソースを使用するプロセスを同時に防ぎます。高速ユーザー空間ミューテックス (futex) は、mutex が別のスレッドによって保持されていない場合に、ユーザー空間スレッドがカーネル領域にコンテキストスイッチを必要とせずに mutex を要求することを可能にするツールです。
注記
本書では、POSIX スレッド (pthread) mutex コンストラクトを記述するために、futex と mutex という用語を使用します。
  1. 標準属性を使用して pthread_mutex_t オブジェクトを初期化すると、プライベート、非再帰、非堅牢、非優先度継承対応のミューテックスが作成されます。
  2. pthreads の下で、ミューテックスは以下の文字列で初期化できます。
    pthread_mutex_t my_mutex;
    
    pthread_mutex_init(&my_mutex, NULL);
    
  3. この場合、アプリケーションは pthreads API および Red Hat Enterprise Linux for Real Time カーネルが提供する利点はありません。アプリケーションの書き込みまたはポート時に考慮する必要のある mutex オプションは複数あります。

手順4.2 高度なミューテックスオプション

ミューテックスの追加機能を定義するには、pthread_mutexattr_t オブジェクトを作成する必要があります。このオブジェクトは、futex の定義済み属性を保存します。
重要
この例では、関数の戻り値の確認は含まれません。これは基本的な安全手順で、常に実行する必要があります。
  1. mutex オブジェクトを作成します。
    pthread_mutex_t my_mutex;
    
    pthread_mutexattr_t my_mutex_attr;
    
    pthread_mutexattr_init(&my_mutex_attr);
    
  2. 共有およびプライベートのミューテックス:
    共有ミューテックスはプロセス間で使用できますが、オーバーヘッドを大きくすることができます。
    pthread_mutexattr_setpshared(&my_mutex_attr, PTHREAD_PROCESS_SHARED);
    
  3. リアルタイム優先度の継承:
    優先度の反転の問題は、優先度継承を使用して回避できます。
    pthread_mutexattr_setprotocol(&my_mutex_attr, PTHREAD_PRIO_INHERIT);
    
  4. 強固なミューテックス:
    所有者の終了時には堅牢なミューテックがリリースされますが、オーバーヘッドのコストも高くなる場合があります。この文字列の _NP は、このオプションが POSIX 非準拠または移植可能ではないことを示します。
    pthread_mutexattr_setrobust_np(&my_mutex_attr, PTHREAD_MUTEX_ROBUST_NP);
    
  5. mutex の初期化:
    属性が設定されたら、これらのプロパティーを使用して mutex を初期化します。
    pthread_mutex_init(&my_mutex, &my_mutex_attr);
    
  6. attributes オブジェクトをクリーンアップします。
    mutex を作成したら、属性オブジェクトを保持して同じタイプのミューテックスを初期化したり、クリーンアップしたりできます。ミューテックスはいずれの場合も影響を受けません。属性オブジェクトをクリーンアップするには、_destroy コマンドを使用します。
    pthread_mutexattr_destroy(&my_mutex_attr);
    
    ミューテックスは、通常の pthread_mutex として動作するようになり、通常どおりロック、ロック解除、破棄できるようになります。
  • futex(7)
  • pthread_mutex_destroy(P)
    pthread_mutex_tpthread_mutex_init の詳細は、
  • pthread_mutexattr_setprotocol(3p)
    pthread_mutexattr_setprotocolpthread_mutexattr_getprotocol の詳細は、
  • pthread_mutexattr_setprioceiling(3p)
    pthread_mutexattr_setprioceilingpthread_mutexattr_getprioceiling の詳細は、
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る