メインページ | モジュール | 名前空間一覧 | クラス階層 | 構成 | ファイル一覧 | 名前空間メンバ | 構成メンバ | ファイルメンバ | 関連ページ

同期機構

排他制御機能、および排他制御付きの演算機能を提供する。 [詳細]

構成

class  lock
 クリティカルセクションを生成するためのテンプレートクラス [詳細]

class  recursive_lock
 ネスト可能なクリティカルセクションを生成するためのテンプレートクラス [詳細]


関数

template<class LockObj, typename T> T & toppers::sync_increment (T &x)
 同期指定付きのインクリメント

template<class LockObj, typename T> T & toppers::sync_decrement (T &x)
 同期指定付きのデクリメント

template<class LockObj, typename T> void toppers::sync_swap (T &x, T &y)
 同期指定付きのスワップ(値の入れ替え)


解説

  μITRON 4.0仕様には、クリティカルセクションを作るための機能がいくつかある。 セマフォやミューテックス、CPUロックやディスパッチ禁止等である。 そうした機能はクリティカルセクションの最初と最後でサービスコールを呼出す必要がある。 しかし、C++ では C に比べて(多くの場合、例外が原因となって)実行パスが非常に複雑であり、 クリティカルセクションから抜けるさいに確実にサービスコールを呼出すことは困難である。
  通常、C++ では特定のスコープから抜ける場合に確実に処理を行わせる方法として、 デストラクタを使用する。 同期機構モジュールでは、インスタンスの生存期間がそのままクリティカルセクションとなるような、 排他制御のためのクラスを提供する。
  例によって、クリティカルセクションを作るための機構は、テンプレート引数によって選択することができる。

関数の解説

template<class LockObj, typename T>
T& sync_decrement T &  x  )  [inline]
 

引数:
x: デクリメントするオブジェクト
返却値:
x を返す。
  テンプレート引数LockObj で指定した同期オブジェクト(semaphoremutexcpulock 等)によって生成されたクリティカルセクションの中で、x を -- 演算子によってデクリメントする。LockObj の詳細についてはlock を参照のこと。

意見:
-- 演算子を多重定義することで、単純なデクリメント以外の動作を実現できる。
注意:
この関数はカーネル非動作状態では使用できない。
参照:
sync_increment sync_swap

template<class LockObj, typename T>
T& sync_increment T &  x  )  [inline]
 

引数:
x: インクリメントするオブジェクト
返却値:
x を返す。
  テンプレート引数LockObj で指定した同期オブジェクト(semaphoremutexcpulock 等)によって生成されたクリティカルセクションの中で、x を ++ 演算子によってインクリメントする。LockObj の詳細についてはlock を参照のこと。

意見:
++ 演算子を多重定義することで、単純なインクリメント以外の動作を実現できる。
注意:
この関数はカーネル非動作状態では使用できない。
参照:
sync_decrement sync_swap

template<class LockObj, typename T>
void sync_swap T &  x,
T &  y
[inline]
 

引数:
x: スワップするする一方のオブジェクト
y: スワップするするもう一方のオブジェクト
  テンプレート引数LockObj で指定した同期オブジェクト(semaphoremutexcpulock 等)によって生成されたクリティカルセクションの中で、xy の値を入れ替える。LockObj の詳細についてはlock を参照のこと。

意見:
コピーコンストラクタと代入演算子を用いて実装しているため、 それらの定義次第では、単純な値の入れ替え以外の動作を実現できる。
注意:
この関数はカーネル非動作状態では使用できない。
参照:
sync_increment sync_decrement