【问题标题】:Userspace threading library [closed]用户空间线程库[关闭]
【发布时间】:2013-03-10 19:43:22
【问题描述】:

我想知道哪些用户空间线程库(用于标准 C++)允许对应用程序级别的抢占式调度进行细粒度控制。目标平台是 POSIX,但有一个跨平台的解决方案会特别好。

【问题讨论】:

  • “对应用程序级抢占式调度的细粒度控制”是什么意思?什么样的控制,如何/何时?假设标准 pthreads 不够好,你需要什么?
  • 我想实现应用程序级调度 - 所以我希望能够使线程(可能正在等待互斥体)休眠,并稍后唤醒它们(并恢复它们的状态) 并设置优先级。
  • 如果有这样的图书馆,我不会感到惊讶,但我不知道。
  • 所以你想要“线程包”,它为每个线程分配堆栈,但不使用操作系统进行调度。这变得很困难,因为您需要捕获所有可能阻塞的调用,以便您可以进行线程切换,直到阻塞调用完成。

标签: c++ multithreading scheduling preemptive


【解决方案1】:

如果设置线程的优先级足够了,你可以使用pthreads:How to increase thread priority in pthreads?。如果您希望能够手动调度,那么您应该使用协作线程,例如 longjump 或http://www.gnu.org/software/pth/pth-manual.html。要使用多个处理器,您需要内核线程,您可以通过 pthreads 或 OpenMP 获得这些线程。

基本上,您最初应该生成几个内核线程,固定它们,然后在内核线程之上运行额外的协作线程。请注意,除非您使用计时器事件实现抢占,否则协作线程是非抢占的,但内核线程将被抢占。一些协作线程方案不适用于 C++,特别是它们在切换时可能会调用堆栈上的变量的析构函数。

【讨论】:

    【解决方案2】:

    Portable Runtime System 具有可自定义的用户空间抢占式调度,但是是用 C 编写的。

    【讨论】:

      【解决方案3】:

      C++11 标准库支持线程,认为它依赖于 Linux 上的 pthreads。 您也可以直接使用 pthreads(它是用 C 实现的)。如果你想要一些可移植的东西 - Qt 有很好的线程支持。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 1970-01-01
        • 2010-10-02
        • 2012-01-17
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多