第10章 RHEL for Real Time のスレッド同期メカニズム


リアルタイムでは、2 つ以上のスレッドが同時に共有リソースにアクセスする必要がある場合、スレッドはスレッド同期メカニズムを使用して調整します。スレッドの同期により、一度に 1 つのスレッドのみが共有リソースを使用するようになります。Linux で使用される 3 つのスレッド同期メカニズムは、ミューテックス、バリア、および条件変数 (condvars) です。

10.1. ミューテックス

ミューテックスは、相互排除という用語に由来します。相互排除オブジェクトは、リソースへのアクセスを同期します。これは、一度に 1 つのスレッドのみがミューテックスを取得できるようにするメカニズムです。

mutex アルゴリズムは、コードの各セクションへのシリアルアクセスを作成するため、一度に 1 つのスレッドだけがコードを実行します。ミューテックスは、mutex 属性オブジェクトと呼ばれる属性オブジェクトを使用して作成されます。これは抽象オブジェクトであり、実装するために選択した POSIX オプションに依存するいくつかの属性が含まれています。属性オブジェクトは、pthread_mutex_t 変数で定義されます。オブジェクトは、ミューテックスに定義された属性を格納します。成功すると、pthread_mutex_init(&my_mutex, &my_mutex_attr) 関数、pthread_mutexattr_setrobust() 関数および pthread_mutexattr_getrobust() 関数は 0 を返します。エラーが発生すると、エラー番号が返されます。

リアルタイムでは、属性オブジェクトを保持して同じ型のミューテックスをさらに初期化するか、属性オブジェクトをクリーンアップ (破壊) することができます。ミューテックスはいずれの場合も影響を受けません。ミューテックスには、標準タイプと高度なタイプのミューテックスが含まれます。

標準ミューテックス

リアルタイム標準のミューテックスは、プライベート、非再帰的、非堅牢、非優先度継承が可能なミューテックスです。pthread_mutex_init(&my_mutex, &my_mutex_attr) を使用して pthread_mutex_t を初期化すると、標準のミューテックスが作成されます。標準のミューテックスタイプを使用する場合、アプリケーションは、pthreads API および RHEL for Real Time カーネルによって提供される利点の恩恵を受けない場合があります。

高度なミューテックス

追加機能で定義されたミューテックスは、高度なミューテックスと呼ばれます。高度な機能には、優先度継承、ミューテックスの堅牢な動作、共有およびプライベートミューテックスが含まれます。たとえば、ロバストミューテックスの場合は、pthread_mutexattr_setrobust() 関数を初期化すると、ロバスト属性が設定されます。同様に、属性 PTHREAD_PROCESS_SHARED を使用すると、スレッドが割り当てられたメモリーにアクセスできる場合に限り、任意のスレッドがミューテックスで動作できるようになります。属性 PTHREAD_PROCESS_PRIVATE は、プライベートミューテックスを設定します。

非堅牢なミューテックスは自動的に解放されず、手動で解放するまでロックされたままになります。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る