代码之家  ›  专栏  ›  技术社区  ›  Maarten Bamelis

标准实验闩锁和屏障使用ptrdiff\u t

  •  4
  • Maarten Bamelis  · 技术社区  · 8 年前

    我在看 C++ experimental extensions for concurrency latch , barrier flex_barrier barrier ,一次性使用或可重复使用。

    当前文件规定了其施工人员的以下签名:

    explicit latch( ptrdiff_t value );
    explicit barrier( std::ptrdiff_t num_threads );
    explicit flex_barrier( std::ptrdiff_t num_threads );
    

    下面对 value num_threads 参数:

    非负

    num_线程 -的参与线程数 障碍;必须为非负

    num_线程 -数量 flex_屏障的参与线程;必须为非负


    所有三个构造函数都接受类型为的参数 std::ptrdiff_t ,它是有符号整数类型。然后,文档明确说明该值必须为非负。

    选择 类型作为参数类型,而不是无符号整数类型,例如 std::size_t . 在我看来,使用无符号整数类型更安全,因为这样就永远不会用无效的参数值调用构造函数。

    1 回复  |  直到 8 年前
        1
  •  6
  •   Alasdair Mackintosh    8 年前

    在2015年2月于科隆举行的C++WG21会议上进行讨论后,做出了这一更改。我当时没有出席,但我将工作组的反馈纳入了文件中。AFAIK关于无符号值的担忧是负符号数可能会意外转换为无符号值。至于使用 short