我在 Linux 上使用带有 boost 的 C++。
根据工作类型确定线程优先级的最佳方法是什么?是否可以在 POSIX / pthread / Linux 中改变线程优先级?
据我所知,boost 没有提供 API 来做到这一点(至少 C++11 标准当然没有)。
在 Linux 上,您可以nice
或setpriority
每个线程独立于其他线程。但是请注意,这不符合 POSIX:
根据 POSIX,nice 值是每个进程的设置。但是,在当前的 POSIX 线程的 Linux/NPTL 实现下,nice 值是每个线程的属性:同一进程中的不同线程可以有不同的 nice 值。可移植应用程序应避免依赖 Linux 行为,这可能会在未来符合标准。
由于 Linux 使用pthreads
(Linux 端口也是如此boost
),因此您也可以使用pthread_setschedparam
它,它的优点是比 Linux 特定的每线程nice
行为更具可移植性。
在这两种情况下,由于不得不求助于系统设施来管理所谓的“不透明” boost
(或std
在 C++11 中)资源,所以会有些不安,所以要小心行事(就像任何特定于实现的东西一样)。