
[英]Threads seem to be getting the same thread argument when they should be different (PThreads)
[英]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
,然后1
或1
然后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.