Maa*_*lis 2 c++ concurrency c++-standard-library
我一直在寻找在C++并发实验扩展,发现新的同步类latch,barrier和flex_barrier.它们都实现了标准屏障,可以单独使用,也可以重复使用.
当前文档为其构造函数声明了以下签名:
explicit latch( ptrdiff_t value );
explicit barrier( std::ptrdiff_t num_threads );
explicit flex_barrier( std::ptrdiff_t num_threads );
Run Code Online (Sandbox Code Playgroud)
有关value或num_threads参数的以下说明:
value - 内部计数器的初始值; 必须是非负面的
num_threads - 屏障的参与线程数; 必须是非负面的
num_threads - flex_barrier的参与线程数; 必须是非负面的
所有三个构造函数都接受一个类型的参数std::ptrdiff_t,它是一个有符号整数类型.然后文档明确声明该值必须是非负的.
我的问题:选择std::ptrdiff_t类型作为参数类型而不是无符号整数类型的理由是什么std::size_t.在我看来,使用无符号整数类型更安全,因为永远不会使用无效的参数值调用构造函数.
我知道当前的定义是实验性的并且倾向于改变,但是,当前的参数类型被明确地选择为有符号整数类型.所以背后一定有某种想法,不是吗?
这一变化是在2015年2月在科隆举行的C++ WG21会议上讨论后做出的.我不在场,但我将WG的反馈意见纳入了该文件.AFAIK关于具有无符号值的担忧是负的有符号数可能会意外地被转换为无符号值.就使用short而言,我们希望确保这些概念可用于为可能存在大量子任务的GPU编写的应用程序中.