【问题标题】:posix thread in c: terminating 1 thread from another using by passing threadsc中的posix线程:通过传递线程从另一个线程终止1个线程
【发布时间】:2020-06-04 04:14:32
【问题描述】:

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

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 线程完成后终止 waiting 线程。

【问题讨论】:

  • 是的,您可以将pthread_t* 传递给线程。请注意,您需要同步对共享数据的访问,即使它是 pthread_t

标签: c multithreading posix


【解决方案1】:

你有两个问题:

1) 在您第二次调用 pthread_create 返回之前,不会设置 t2 的值。您需要更改两个pthread_create 调用的顺序。

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

通过这两个更改,它应该可以工作。

【讨论】:

  • @Waqar Haider,从字面上改变语句的顺序,并在对pthread_create 的调用中使用&t2 而不是t2。 (只需通过调用 pthread_join 确保 t1main 完成之前完成。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多