検索

4.3. mutex オプション

download PDF

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

相互除外 (mutex) アルゴリズムは、共通のリソースを使用するプロセスを同時に防ぎます。高速ユーザー空間ミューテックス (futex) は、mutex が別のスレッドによって保持されていない場合に、ユーザー空間スレッドがカーネル領域にコンテキストスイッチを必要とせずに mutex を要求することを可能にするツールです。

注記

本書では、POSIX スレッド (pthread) mutex コンストラクトを記述するために、futex と mutex という用語を使用します。
  1. 標準属性で pthread_mutex_t オブジェクトを初期化すると、プライベートで再帰的ではない不正処理および非優先度の継承 mutex が作成されます。
  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 高度なミューテックスオプション

mutex の追加機能を定義するには、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 を作成したら、属性オブジェクトを保持して同じタイプのミューテックスを初期化したり、クリーンアップしたりできます。mutex はいずれの場合も影響を受けません。属性オブジェクトをクリーンアップするには、_destroy コマンドを使用します。
    pthread_mutexattr_destroy(&my_mutex_attr);
    
    mutex は通常の pthread_mutex として通りに動作し、ロック、ロック解除、破棄が通常通りに可能になります。
関連する man ページ

詳細は、以下の man ページは本セクションに記載の情報に関連しています。

  • futex(7)
  • pthread_mutex_destroy(P)
    pthread_mutex_t および pthread_mutex_init の詳細
  • pthread_mutexattr_setprotocol(3p)
    pthread_mutexattr_setprotocol および pthread_mutexattr_getprotocol の詳細
  • pthread_mutexattr_setprioceiling(3p)
    pthread_mutexattr_setprioceiling および pthread_mutexattr_getprioceiling の詳細
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

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

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

会社概要

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

© 2024 Red Hat, Inc.