私は、次のような実験でした:スレッドID割り当てはどのように整理されていますか?
#include <iostream>
#include <thread>
void t()
{
std :: cout << std :: this_thread :: get_id() << std :: endl;
}
void f()
{
std :: cout << std :: this_thread :: get_id() << std :: endl;
}
int main()
{
std :: cout << std :: this_thread :: get_id() << std :: endl;
for(unsigned int i = 0; i < 1000; i++)
{
std :: thread d(t);
d.join();
std :: thread g(f);
g.join();
}
}
をしてthread_id
Sの結果のリストが常に同じになることに気づきました。言い換えれば、この場合、thread_id
は、スレッドが結合されて再オープンされるたびに継続的に再割り当てされました。
ここで、いつもこれが起こるという確信はありますか?または、thread_id
が1回だけ割り当てられた後、常に異なるthread_id
がランダムな方法で割り当てられることがありますか?
両方のスレッドを作成した後に結合を実行するとどうなりますか?あなたが参加すると、スレッドを終了します。 – NathanOliver
私は唯一の保証は、2つのスレッドがIDが異なることがアクティブな場合だと思います。 IDの割り当てはおそらく実装に依存します。 – vu1p3n0x
@ NathanOliver両方のスレッドが作成された後に参加すると、2つの値が交互に表示されます。すごくかわいい。しかし、フラットマウスが指摘するように、これはすべてのプラットフォームでは機能しません。 –