Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t现代C++;具有优先级的库支持线程? 第三多个C/C++库提供多线程支持线程优先级、相应的调度程序等。为什么现代C++标准不支持这个有用的特性?P> > P>此标准中没有指定该特征,这意味着从今天开始,C++标准所描述的“线程”没有优先级。 对于POSIX系统,您可以使用pthread_setschedparam 对于Windows,您可以使用SetThreadPriority_C++_Multithreading_C++11_Concurrency - Fatal编程技术网

为什么';t现代C++;具有优先级的库支持线程? 第三多个C/C++库提供多线程支持线程优先级、相应的调度程序等。为什么现代C++标准不支持这个有用的特性?P> > P>此标准中没有指定该特征,这意味着从今天开始,C++标准所描述的“线程”没有优先级。 对于POSIX系统,您可以使用pthread_setschedparam 对于Windows,您可以使用SetThreadPriority

为什么';t现代C++;具有优先级的库支持线程? 第三多个C/C++库提供多线程支持线程优先级、相应的调度程序等。为什么现代C++标准不支持这个有用的特性?P> > P>此标准中没有指定该特征,这意味着从今天开始,C++标准所描述的“线程”没有优先级。 对于POSIX系统,您可以使用pthread_setschedparam 对于Windows,您可以使用SetThreadPriority,c++,multithreading,c++11,concurrency,C++,Multithreading,C++11,Concurrency,围绕这些调用(如果您使用其他平台,可能还有其他调用)为您的程序编写一个简单的包装器类非常容易 (您可以使用检索本机线程句柄来执行此操作) 请提供此说明: 以这种方式启动的线程是在定义了实现的情况下创建的 线程属性,如堆栈大小、调度、优先级等。。。或任何 平台特定属性。目前尚不清楚如何提供 便携式界面,允许用户设置特定于平台的 属性。线程保持在中间道路通过阶级 thread::允许至少以可移植的方式设置 堆栈大小如下[…] 我认为,简单的回答是,如果该标准包含了一种指定优先级的方法,那么它还必须

围绕这些调用(如果您使用其他平台,可能还有其他调用)为您的程序编写一个简单的包装器类非常容易

(您可以使用检索本机线程句柄来执行此操作)


请提供此说明:

以这种方式启动的线程是在定义了实现的情况下创建的 线程属性,如堆栈大小、调度、优先级等。。。或任何 平台特定属性。目前尚不清楚如何提供 便携式界面,允许用户设置特定于平台的 属性。线程保持在中间道路通过阶级 thread::允许至少以可移植的方式设置 堆栈大小如下[…]


我认为,简单的回答是,如果该标准包含了一种指定优先级的方法,那么它还必须指定结果会是什么。不幸的是,这将导致两种可能性之一:要么强制人们在具有不同语义的系统上从头开始完全重新实现线程,要么限制使用
std::thread
的代码可以移植到的平台

例如,在某些系统上,具有足够高优先级(例如,“实时优先级”)的线程使用循环调度。其他系统不这样做——当一个具有足够高优先级的线程启动时,它将继续被调度,直到运行完成,或者被一个更高优先级的线程中断。指定任何一种行为都会导致移植到使用另一种行为的系统时出现问题

许多(大多数?)系统还包括一些防止低优先级线程饥饿的机制,因此即使高优先级线程准备运行,它们也可以继续接收一些CPU时间。同样,细节各不相同,一些(尤其是更小/更简单的)系统根本不包含任何此类机制。如上所述,尝试指定任何一种行为都会导致难以移植到实现不同行为的系统


包含一个
set\u priority(int)
(或类似的东西)很容易,但是指定它的可移植性意味着什么/做了什么几乎是不可能的。

因为没有人指定它。下面是最终成为标准线程库的建议:。它并没有提到任何地方的优先权。@你是说标准化吗?COMITEE不完全考虑这个特征?我当时没有遵循标准轨道,但要么没有人提出它考虑,或者如果有人提出的建议不是在一个理想的形状纳入标准。WG21的开放std站点是寻找此类答案的好地方。可能是因为线程优先级和其他属性非常依赖于系统,因此很难使其既可移植又有用(但我没有详细遵循标准化过程,因此我不知道这是否是基本原理)。线程库提供了一个后门,
native\u handle()
,用于访问本机线程API中可用的任何工具。