c - 跟踪 Pthread 完成的顺序

标签 c multithreading concurrency pthreads

我有一个生成两个线程的进程。我想知道哪个线程最先完成,哪个线程最后完成。我是 C 编程和 Pthreads 的新手。 我已经浏览了“pthread_join”的文档,但不确定如何使用它。

最佳答案

有两种方法可以做到这一点。一种很简单,但要求线程不调用pthread_exit。另一个更复杂,但支持线程可能调用 pthread_exit 的用例。

在这两种情况下,您都需要一些函数来报告线程的终止。编写起来应该非常简单——获取互斥锁,使用有关哪个线程终止以及何时终止的信息更新一些共享结构,然后释放互斥锁。

简单的方法:构造线程时,向其传递一个包装函数,该函数在常规线程函数返回后调用终止报告函数。

复杂方法:使用pthread_key_create创建一个TSD key ,其析构函数报告线程终止。当您构造线程时,向其传递一个包装函数。包装函数应创建 TSD 数据的实例,其析构函数报告线程终止。

我假设您确实想要/需要做您所说的想做的事情。很可能有更好的方法来解决您实际的外部问题,但您没有告诉我们问题是什么。

关于c - 跟踪 Pthread 完成的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35137958/

相关文章:

concurrency - 顺序一致但非静态一致的执行示例

java - 在工作线程中阻塞 Java Swing 用户的模式

Java Swing 多线程和 ui 卡住

c - 如何从指针访问结构成员

c++ - 转换递归函数并使其迭代

java - Hibernate 不使用由 Visual-Paradigm 生成的 DAO 对象保存在 DB 中

java - notifyAll() 不起作用,如何在套接字编程中通知所有线程

c - 从 FIFO 读取的程序是否有任何方法可以检测到写入同一 FIFO 的程序已将其关闭?

python - 如何将 GtkTreePath 或 GtkTreeIter 获取到 GtkTreeModel 的最后一行?

java - 如何在多线程环境下mysql hibernate使用一张表的自增值插入多张表