2015-09-28 3 views
7

は、プロセス間でstd :: thread :: idが一意ですか? IDSは、別のプロセスとは異なります。私の経験から

std::this_thread::get_id() 

の結果は、プロセス全体で一意であるようです。

これは標準で保証されていますか?

+0

あなたはgccをLinux上で、あるいはC++のために一般的に求めていますか?答えは異なるようです。 – nwp

+0

私の質問は、一般的なC++標準についてです。私はすべてのプラットフォームとすべてのコンパイラで答えを探しています。 –

+5

標準には、「プロセス」というコンセプトはなく、複数のプログラムが同時に実行され相互作用するという概念はありません。したがって、質問は標準的な言葉で定式化することさえできません。あなたが聞くことができるのは、「典型的な実装は何をするのでしょうか?」です。 –

答えて

1

std :: threadは、pthreadをサポートする環境のpthreadの上に実装されています。だから、その(携帯)保証はありませんになります。

pthread_selfからマニュアル:

スレッドIDは、唯一のプロセス内で一意であることが保証されています。 A
スレッドIDは、終了スレッドが結合された後に再利用されるか、 分離スレッドが終了した後に再利用される可能性があります。

+3

これは、C++標準で要求されていることには答えません。つまり、C++標準でスレッドIDがプロセス間で一意である必要がある場合、実装はpthread IDを単純に再利用できません。 (ただし、C++標準ではスレッドIDがプロセス間でユニークである必要はありません) – hvd

+0

@ hvd yesですが、std :: threadはpthreadをサポートする環境のpthreadの上に実装されています。だから、その(携帯)保証はありませんになります。 – PSIAlt

+2

'std :: thread'が実装されているclamのソースをpthreadのtopに追加できますか?私はこれを必要とする標準を想像することはできません。また、pthreadsが利用可能で、 'std :: thread'を実装するために使用されていないので、Windowsが反例であることもかなり確信していますが、どちらもネイティブWinApi実装を代わりに使用しています。しかし、Microsoftが標準に準拠していないのは初めてではありません。 – nwp

2

スレッドIDが異なるスレッド間でユニークである標準の権限付与対象ユーザーは、終了スレッドIDが再利用される可能性があるとも言います。プロセスを指定するものではなく、プロセスの存在を認めないため、プロセス間の一意性を保証するものでもありません。

30.3.1.1

  1. 型スレッドのオブジェクト:: IDは、実行のスレッドごとに一意の識別子を提供し、すべてのスレッドのための単一の別個の値は、実行のスレッドを表していない オブジェクト(30.3.1)。 実行中の各スレッドは、他の実行スレッドの thread :: idオブジェクトと等しくなく、 のstd :: threadオブジェクトのthread :: idオブジェクトと同じではない関連するthread :: idオブジェクトを持っています のオブジェクトは実行スレッドを表します。
  2. thread :: idは、簡単にコピー可能なクラスでなければなりません(第9項)。ライブラリは、終了したスレッド のthread :: idの値を再利用することができます。

標準は、スレッドの実装を離れて隠し:: ID、それはintまたは何か他のものである可能性があります。

関連する問題