繁体   English   中英

pthreads:如果我创建具有相同线程ID的线程会怎样?

[英]pthreads: What happens if I create threads with same thread IDs?

我这样做来创建2个具有相同线程ID的线程:

pthread_t pt;
int rc1, rc2, t1, t2;
t1 = 0;
t2 = 1;
rc1 = pthread_create(&pt, NULL, func(), (void*)&t1);
rc2 = pthread_create(&pt, NULL, func(), (void*)&t2);

func()仅打印传递的参数

我发现了什么是输出可以是任意的0 ,然后11然后0 这里到底发生了什么? 无论如何,这种情况是否与使用两个pthread_t值不同?

我这样做来创建2个具有相同线程ID的线程:

不,你不是。 这不可能。

pthread_create函数创建一个新线程(具有唯一ID),并将新线程的ID存储在作为第一个参数传递的pthread_t 该参数是一个out参数,表示不使用您传入的pthread_t的值,在调用完成后,将为它存储一个新值供您使用。

您正在执行的操作是创建两个具有不同ID的线程,但是您将在创建第二个线程时覆盖保存第一个ID的变量。

这意味着您只知道一个线程ID,但是仍然有两个不同的ID。

如果您不知道第一个线程的ID(因为您覆盖了存储ID的变量),则您将无法加入,分离或发送信号。

我发现输出可以是0到1或1到0的任何一个。这里到底发生了什么? 无论如何,这种情况是否与使用两个pthread_t值不同?

不会有任何区别。 使用两个线程ID不会对执行顺序产生任何影响。

如果创建具有相同线程ID的线程会怎样?

如果您没有线程ID,则无法与之连接 (使用pthread_join() )或向其发送信号(使用pthread_signal() ),调整调度参数(使用pthread_setschedparam / pthread_getschedparam )等。除此之外,没关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM