gpt4 book ai didi

c - 如何重用线程-pthreads c

转载 作者:行者123 更新时间:2023-12-04 11:23:10 26 4
gpt4 key购买 nike

我在C中使用pthreads进行编程。

我有一个父线程,需要创建ID为0、1、2、3的4个子线程。
当父线程获取数据时,它将设置拆分数据并将其分配给4个单独的上下文变量-每个子线程一个。
子线程必须处理此数据,与此同时,父线程应在这些线程上等待。
这些子线程执行完毕后,将在其相应的上下文变量中设置输出,并等待(以供重用)。
一旦父线程知道所有这些子线程都已完成本轮操作,它将计算全局输出并将其输出。
现在它等待新数据(子线程尚未被杀死,它们只是在等待)。

如果父线程获得更多数据,则重复上述过程-尽管已经创建了4个线程。

如果父线程接收到kill命令(假定一种特定类型的数据),它将指示所有子线程并终止。现在,父线程可以终止。

我是硕士研究生,并且遇到上述情况的需求。我知道可以使用pthread_cond_wait,pthread_Cond_signal完成此操作。我已经写了代码,但是它只是无限期地运行,我不知道为什么。

我的猜测是,按照我编写代码的方式,我使方案变得过于复杂。知道如何实现将非常有帮助。如果需要,我可以发布代码的简化版本以显示我要执行的操作(即使我认为我的方法有缺陷!)...

您能否给我任何有关如何使用pthreads实现此方案的见解?

最佳答案

从您的描述中可以看出,该原理似乎没有错。

我想您要实现的是一个工作池,我想应该有很多实现。如果您的线程正在做的工作是大量的计算(例如至少要花CPU秒左右),那么这种方案就完全是多余的了。 POSIX线程的Mondern实现足够有效,以至于它们支持创建很多线程,的确很多,而且开销也不高。

如果让您的工作人员通过共享变量,互斥体等(而不是通过线程的返回值)进行通信,那么唯一重要的事情是,您可以通过使用pthread_create的attribute参数来分离线程。

一旦为任务完成了这种实现,就可以进行测量。只有这样,如果您的探查器告诉您您在pthread例程中花费了大量时间,请开始考虑实现(或使用)工作池来回收线程。

关于c - 如何重用线程-pthreads c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10240347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com