在这种情况下处理 pthread 通信/信号的正确方法?

Posted

技术标签:

【中文标题】在这种情况下处理 pthread 通信/信号的正确方法?【英文标题】:Proper way to handle pthread communication / signals in this instance? 【发布时间】:2012-09-21 20:14:31 【问题描述】:

我正在编写一个在对等点之间共享文件的小型客户端/服务器演示。一个对等点从主服务器获取一个 IP 地址列表,主线程为每个相应的文件创建一个线程。流程如下:

主线程从服务器获取文件列表 为每个文件创建线程(分离) 在每个创建的线程中,连接到指定/与文件关联的对等点 线程分块下载文件 线程宣布文件完成

当我尝试“查询”一个线程时,我的问题就出现了。在每个线程中,我都会跟踪传输的进度。在我的主线程中,我希望用户能够看到所有正在发生的传输的进度。最好的方法是什么?我正在考虑使用 pthread_kill 分别向每个线程发送信号,尽管似乎应该有更好的方法。如果有人有想法,我很乐意听到。

【问题讨论】:

【参考方案1】:

当你创建你的线程时,你包括一个void * 来指向你想要的任何东西。在您的示例中,您可以声明一个进度值数组并将其中一个的地址传递给您创建的每个线程,让线程在需要时执行简单的更新,并且您的主线程可以定期检查这些值。

如果您已经将该参数用于某事,则需要创建一个包含该新值和您已在使用的任何内容的结构,并传递它的地址,以便线程获得所需的一切。

【讨论】:

以上是关于在这种情况下处理 pthread 通信/信号的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

SylixOS中pthread_cancel函数浅析

Linux系统编程-(pthread)线程通信(信号量)

Linux系统编程-(pthread)线程通信(互斥锁)

pthread_sigmask 在信号处理程序中不起作用

信号处理程序中的 pthread_exit()

是否可以在没有 pthread_join() 的情况下使用 pthread?