gpt4 book ai didi

定期调用已创建线程的函数(手动调度)

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:25 24 4
gpt4 key购买 nike

我已经创建了 10 个线程(准确地说是 pthreads),每个线程都注册了一个回调函数,比如 fn1、fn2 ...fn10。我还使用调度策略 FIFO 为每个线程分配了不同的优先级。应用程序的要求是必须定期调用这些函数中的每一个(每个线程的周期性不同)。为了实现周期性,我从其他问题中得到了使用 itimer 和 sigwait 方法的想法(不太确定这是否是实现它的好方法,欢迎任何其他实现它的建议)。

我的问题是,当每个线程的周期不同时,我如何需要处理 SIGALRM 以在各自的线程中重复调用这些函数?

提前致谢。

最佳答案

使用 Do sleep functions sleep all threads or just the one who call it?作为引用,我的建议是避免 SIGALRM。信号通常传递给进程。

恕我直言,您有两种方法可以做到这一点:

  • 实现一个智能监视器,了解所有线程的周期性。它计算它必须唤醒线程的时间,休眠到那个时间,唤醒线程并持续迭代。优点:线程只等待信号量或其他互斥量,缺点:监视器对我来说太聪明了
  • 每个线程都知道它的周期性,并存储它的最后开始时间。当它完成它的工作时,它会计算在下一次激活时间之前应该等待多长时间,并在这段时间内休眠。优点:每个线程都是完全独立的,实现看起来很容易,缺点:您必须确保在您的实现中,sleep 调用仅阻止调用线程。

我会使用第二种解决方案,因为第一种看起来像是线程环境中 sleep 的用户级实现。

关于定期调用已创建线程的函数(手动调度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26904124/

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