簡體   English   中英

標准實驗閂鎖和屏障使用 ptrdiff_t

[英]Standard experimental latch and barrier use ptrdiff_t

我正在查看C++ 並發實驗擴展,並注意到新的同步類latchbarrierflex_barrier 它們都實現了標准的屏障,可以是一次性的,也可以是可重復使用的。

當前文檔為其構造函數聲明了以下簽名:

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

valuenum_threads參數的解釋如下:

value - 內部計數器的初始值; 必須是非負數

num_threads - 屏障的參與線程數; 必須是非負數

num_threads - flex_barrier 的參與線程數; 必須是非負數


所有三個構造函數都接受一個std::ptrdiff_t類型的參數,它是一個有符號整數類型。 然后文檔明確指出該值必須為非負值。

我的問題:選擇std::ptrdiff_t類型作為參數類型而不是無符號整數類型(如std::size_t )的基本原理是什么。 在我看來,使用無符號整數類型更安全,因為構造函數永遠不能用無效的參數值調用。

我知道當前的定義是實驗性的並且傾向於改變,但是,當前的參數類型仍然被明確選擇為有符號整數類型。 所以這背后一定有什么想法,不是嗎?

這一更改是在 2015 年 2 月在科隆舉行的 C++ WG21 會議上討論后做出的。我當時沒有出席,但我將 WG 的反饋納入了文檔。 AFAIK 對具有無符號值的擔憂是負有符號數可能會意外地轉換為無符號值。 就使用short go 而言,我們希望確保這些概念可用於為 GPU 編寫的應用程序,其中可能存在大量子任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM