GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
designlab::AsyncableData< T > クラステンプレートfinal

非同期処理を行う際に,データの更新回数とデータをまとめて扱うためのクラス. [詳解]

#include <asyncable_data.h>

公開メンバ関数

 AsyncableData ()
 
 AsyncableData (const T &data)
 
 AsyncableData (const AsyncableData &)=delete
 コピーは禁止
 
AsyncableDataoperator= (const AsyncableData &)=delete
 コピー代入は禁止
 
 AsyncableData (AsyncableData &&)=delete
 ムーブは禁止
 
GetData () const
 値をコピーして返す.
この時,read lockをかける.
当然,データの更新回数はインクリメントされない.
 
void SetData (const T &data)
 値を変更する.
この時,write lockをかける.
データの更新回数をインクリメントする.
 
int GetUpdateCount () const
 データの更新回数を返す.
この時,read lockをかける.
この値を調べて,データの更新回数が変わっているかを確認することで, データの更新が必要かを確認する.
 

詳解

template<CopyAssignable T>
class designlab::AsyncableData< T >

非同期処理を行う際に,データの更新回数とデータをまとめて扱うためのクラス.

この構造体は,データの更新回数とデータをまとめて扱うためのクラス. 値の変更を行う際に,データの更新回数をインクリメント(++のこと)することで, データの更新回数をカウントする.
また,値の参照と変更を行う際にミューテックスを用いて, 同時に変更されることを防ぐ.ミューテックスについては以下を参照.

[非同期処理について]
非同期処理 (並列・同時に処理を行うこと) を行う際に, 一つのにデータに同じタイミングで操作すると危険(未定義処理になり, 成功か失敗かが不定になる). このクラスはそれを防ぐために boost::shared_mutex を使用している. このクラス内では read lock, write lockを使っている.

[参考]


メンバのm_mtxについている mutable は, constなメンバ関数 (メンバの値を変更できないメンバ関数)においても変更できるようになるメンバ変数を表 す.通常絶対使うべきではないが,今回のような場合(boost::shared_mutexを使う場合) は有効的.

テンプレート引数
T非同期処理を行うデータ.代入を行うことができる型を指定すること.

asyncable_data.h54 行目に定義があります。

構築子と解体子

◆ AsyncableData() [1/4]

template<CopyAssignable T>
designlab::AsyncableData< T >::AsyncableData ( )
inline

asyncable_data.h57 行目に定義があります。

◆ AsyncableData() [2/4]

template<CopyAssignable T>
designlab::AsyncableData< T >::AsyncableData ( const T &  data)
inlineexplicit

asyncable_data.h58 行目に定義があります。

◆ AsyncableData() [3/4]

template<CopyAssignable T>
designlab::AsyncableData< T >::AsyncableData ( const AsyncableData< T > &  )
delete

コピーは禁止

◆ AsyncableData() [4/4]

template<CopyAssignable T>
designlab::AsyncableData< T >::AsyncableData ( AsyncableData< T > &&  )
delete

ムーブは禁止

関数詳解

◆ GetData()

template<CopyAssignable T>
T designlab::AsyncableData< T >::GetData ( ) const
inline

値をコピーして返す.
この時,read lockをかける.
当然,データの更新回数はインクリメントされない.

戻り値
値をそのまま返す.参照ではない.

asyncable_data.h68 行目に定義があります。

◆ GetUpdateCount()

template<CopyAssignable T>
int designlab::AsyncableData< T >::GetUpdateCount ( ) const
inline

データの更新回数を返す.
この時,read lockをかける.
この値を調べて,データの更新回数が変わっているかを確認することで, データの更新が必要かを確認する.

戻り値
データの更新回数.

asyncable_data.h99 行目に定義があります。

◆ operator=()

template<CopyAssignable T>
AsyncableData & designlab::AsyncableData< T >::operator= ( const AsyncableData< T > &  )
delete

コピー代入は禁止

◆ SetData()

template<CopyAssignable T>
void designlab::AsyncableData< T >::SetData ( const T &  data)
inline

値を変更する.
この時,write lockをかける.
データの更新回数をインクリメントする.

引数
[in]dataセットする値.const参照渡しされる.

asyncable_data.h80 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: