2012-05-08 7 views
0

次のように私はマップを使用しています:pthread_cond_tはオブジェクトか何ですか?

キー--->タスクID

値--->pthread_cond_tオブジェクト

特定のタスクが実行されると、私は関連付けられているすべてのpthreadsを覚ましますこれは一致するpthread_cond_t要素を使用しています。

私の質問は簡単です - pthread_cond_tとは何ですか?それはオブジェクトですか?マップを削除すると、マップはそのコンストラクタを呼び出すので、それは私には良いものではありません。そのない場合は - 私はちょうど私がやろうとしています何

pthread_cond_t cond = *(_flushCond->operator [](task_id)); //map of conditions 
_flushCond->operator [](task_id) = NULL; 
return cond; 

を返すことができることは、後で使用するためにマップ内のオブジェクトを解放し(私はIDを再利用)していたpthread_cond_tオブジェクトを返すことです。

+0

pthreadはC APIですので、コンストラクタなどはありません。あなたは自由にそれを渡すことができるはずです。 –

+0

しかし、それにはポインタがありますか、それともプリミティブ型以外の何かがありますか? – yotamoo

+2

これは不透明なタイプなので、コードは内部に何も気にしないでください。 –

答えて

3

他の人がコメントしているように、実装定義型に対しては、それは不透明な型(またはもしあれば処理します)です。いくつかの実装では、それは実際の条件変数構造へのポインタであり、構造そのものであっても、あるインプリメンテーション内部データ構造へのポインタのポインタであってもよい。 POSIX標準では、そのことについての保証やコミットメントはなく、そのタイプの「オブジェクト」を使用して実行できる一連の操作しかありません。その点では、pthread_mutex_tやpthread_tのような他のタイプのPthreadsと非常によく似ています。

pthread_cond_tは、安全に、または少なくとも移植可能にSTLマップの値として使用することはできません。その理由は、値の要件はコピー可能であり、保証可能であるということです。技術的にはpthread_cond_tのために実行可能ですが、それはlegal to do soではありません。

"コピー可能"ではない他のタイプと同じように、pthread_cond_t *(ポインタ)を格納する必要があります。

関連する問題