Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 线程id分配有多整洁?_C++_Multithreading - Fatal编程技术网

C++ 线程id分配有多整洁?

C++ 线程id分配有多整洁?,c++,multithreading,C++,Multithreading,我做了以下实验: #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 ma

我做了以下实验:

#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();
    }
}
#包括
#包括
void t()
{

std::cout不,你不能假设它总是一样的。在VS2015上,我得到以下信息:

...
2444
18472
29912
25180
6612
29440
13220
4684
14004
12388
16424
26320
25948
28076
30904
6396
1160
4228
...

不,你不能假设它总是一样的。在VS2015上,我得到以下信息:

...
2444
18472
29912
25180
6612
29440
13220
4684
14004
12388
16424
26320
25948
28076
30904
6396
1160
4228
...

这里有一些文档:

重点是我的

类thread::id是一个轻量级的可复制类,用作std::thread对象的唯一标识符

此类的实例还可能包含不代表任何线程的特殊独特值。一旦一个线程完成,std::thread::id的值可能会被另一个线程重用

此类被设计为在有序和无序的关联容器中用作键


这里有一些文档:

重点是我的

类thread::id是一个轻量级的可复制类,用作std::thread对象的唯一标识符

此类的实例还可能包含不代表任何线程的特殊独特值。一旦一个线程完成,std::thread::id的值可能会被另一个线程重用

此类被设计为在有序和无序的关联容器中用作键


如果在创建两个线程后执行联接,会发生什么情况?当您联接时,将结束该线程。我认为唯一的保证是,如果两个线程处于活动状态,则ID将不同。ID分配可能取决于实现。@NathanOliver如果在创建两个线程后联接,则会得到两个交替值。相当预先tty。但是,正如flatmouse指出的,这不会在所有平台上都起作用。@MatteoMonti它将由实现定义。您实际上想做什么?@NathanOliver我需要一个资源池,这样每当启动一个线程时,如果其中一个资源可用,它就会被分配,否则会创建并添加一个新的资源这与
线程_local
无关,在这里你可以使用非平凡的析构函数来释放资源,但我是在Mac OS Xcode下工作的。这里你只得到
\u线程
,它不允许非平凡的析构函数。如果在创建两个线程后进行连接会发生什么?当你加入你结束线程。我认为唯一的保证是,如果两个线程处于活动状态,ID将不同。ID分配可能取决于实现。@NathanOliver如果我在创建两个线程后加入,我会得到两个交替值。非常漂亮。但是,正如flatmouse指出的,这不会在所有平台上都起作用orms@MatteoMonti它将由实现定义。您实际想做什么?@NathanOliver我需要一个资源池,这样每当启动一个线程时,如果其中一个资源可用,那么它就会被分配,否则会创建一个新的资源并添加到池中。这与
thre无关ad_local
在那里你可以使用非平凡的析构函数来释放资源,但我在Mac OS Xcode下工作。在那里你只能得到
_线程
,它不允许使用非平凡的析构函数。叹气。那就得找到另一种方法了!谢谢你!很遗憾这里没有捷径,很高兴我们能很快排除它。:)叹气。必须找到那就换一种方式吧!谢谢!看到这里没有捷径,我很难过,很高兴我们能很快排除它。:)