2012-03-11 5 views
0

こんにちは私は作成されたセマフォのリストとそれらの許容カウント(そのセマフォにアクセスすることが許可されているスレッドインスタンスはありません)の値を維持したいと思います。私は、キー(sem_t)の値がマップの値であるように、セマフォにIDを与える

map<sem_t, int> sem_map; 

のようなstlのマップを試しました。

しかし、C++ではsem_tをキーとして使用することができません(sem_t)union型です。セマフォリストをどのように維持できますか?私の目標は、セマフォをロックまたはロック解除したいときはいつも、私のメンテナンスされたリストからセマフォのIDを取得し、それを使っていくつかの前処理を行います。あなたがキーとしてsem_tのアドレスを使用することができます

+0

マップのようなものを保存できません sem_mapここで、threadIDはあなたのキーで、ユニオンタイプは値ですか?それ以外の場合は、セマフォ、最大スレッド数、現在のスレッド数、スレッドID、オプションの文字列識別子を保持するようにクラスを宣言し、定義する必要があります。 – EdChum

+0

こんにちは、私は思っていました。 –

答えて

2

map<sem_t*, int> sem_map; 

その後、sem_t X与え、あなたはマップ内のint型の値にアクセスすることができ使用:

sem_map.find(&x); 

注このソリューションいますセマフォをコピーしていない場合にのみ機能します。

EDIT:マップでsem_tをキーとして使用できなかった理由は、std :: mapでは、キータイプに演算子<が定義されている必要があります(内部ソートを行うためにstd :: map(s)木構造です)。しかし、組合にはオペレータ<が定義されていないので、コンパイラはそれを使用させません。一方、ポインタはそれらの間で比較することができるので、実際にはstd :: mapのキーとして使用できます。

+0

これは私の仕事でした。 –

+0

btwなぜC++がsem_tを許可しなかったのですが、代わりにsem_t *を許可するのか説明できますか? –

+0

私の答えを編集しました。 – mfontanini

関連する問題