所以当我练习线程时,我意识到我们可以将值传递给线程。现在我想知道,创建时是否可以将线程传递给另一个线程。那样的东西;
int main(){
pthread_t t1;
pthread_t t2;
pthread_create(&t1, NULL, counting, t2);
pthread_create(&t2, NULL, waiting, &results);
//...
}
我的函数看起来像这样;
void* counting(void * arg) {
pthread_t *t = arg;
pthread_cancel(arg);
}
我这样做是因为我想从counting
线程结束时终止它。
您有两个问题:
1]直到您再次调用waiting
时,才设置t2
的值。您需要更改两个pthread_create
调用的顺序。
2)由于线程采用pthread_create
,因此需要将其传递给void *
。将void *
强制转换为pthread_t
是不安全的。一种常见的模式是void *
新结构,将其填充,然后将指向它的指针传递给新创建的线程。完成后,新创建的线程可以malloc
结构。 (您也可以将free
强制转换为&t2
,只需确保void *
始终保持有效,因为否则取消引用传递给新创建线程的指针是不安全的。)
有了这两个更改,它应该可以工作。