使用 C++11 线程确保每个线程都有机会在给定时间段内执行

Goo*_*eds 4 c++ multithreading scheduling c++11

假设我有一个 C++11 多线程程序,其中每个线程控制向用户显示的内容的行为。

我想确保在T给定程序的线程之一运行的每个时间段内,每个线程都有机会执行至少 time t,以便显示看起来好像所有线程都在同时执行。这个想法是建立一种基于线程中存储的某些信息进行时间共享的循环调度机制,强制线程在其时间片结束后等待,而不是依赖操作系统调度程序。

最好,我还想确保每个线程都是实时调度的。

如果除了依赖操作系统没有办法的话,Linux有什么解决办法吗?

是否有可能做到这一点?如何?

Art*_* R. 5

不,C++11 线程不可能跨平台。调用线程的频率和时间并不取决于应用程序。这取决于您使用的操作系统。


然而,仍然有一些函数可以用来标记操作系统,一个特殊的线程/进程确实很重要,这样你就可以根据你的目的影响这个时间模糊。

您可以获取平台相关的线程句柄来使用操作系统功能。

native_handle_type    std::thread::native_handle //(since C++11)
Run Code Online (Sandbox Code Playgroud)

返回实现定义的底层线程句柄。

我只是想再次声明,这需要每个平台都有不同的实现!


微软Windows

根据微软文档

设置线程优先级函数

设置指定线程的优先级值。该值与线程进程的优先级一起确定线程的基本优先级。


Linux/Unix

对于 Linux 来说事情更加困难,因为有不同的系统如何调度线程。在 Microsoft Windows 下,它使用优先级系统,但在 Linux 上,这似乎不是默认的调度。

有关更多信息,请查看std::threadstackoverflow 问题(因此应该相同