c中的pos线程:通过传递线程来终止另一个线程中的1个线程

问题描述 投票:0回答:1

所以当我练习线程时,我意识到我们可以将值传递给线程。现在我想知道,创建时是否可以将线程传递给另一个线程。那样的东西;

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线程结束时终止它。

c multithreading posix
1个回答
0
投票

您有两个问题:

1]直到您再次调用waiting时,才设置t2的值。您需要更改两个pthread_create调用的顺序。

2)由于线程采用pthread_create,因此需要将其传递给void *。将void *强制转换为pthread_t是不安全的。一种常见的模式是void *新结构,将其填充,然后将指向它的指针传递给新创建的线程。完成后,新创建的线程可以malloc结构。 (您也可以将free强制转换为&t2,只需确保void *始终保持有效,因为否则取消引用传递给新创建线程的指针是不安全的。)

有了这两个更改,它应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.