concurrent_queue 類別
concurrent_queue
類別是一種序列容器類別,允許以先進先出的方式存取其項目。 它會啟用一組有限的並行安全作業,例如 push
和 try_pop
等。 在這裡,並行安全表示指標或反覆運算器一律有效。 這不是元素初始化或特定周遊順序的保證。
語法
template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;
參數
T
要儲存在佇列中的項目數據類型。
_斧頭
型別,表示預存配置器對象,這個物件會封裝此並行佇列之內存配置和解除分配的詳細數據。 這個引數是選擇性的,而且預設值是 allocator<T>
。
成員
公用 Typedefs
名稱 | 描述 |
---|---|
allocator_type |
型別,表示並行佇列的配置器類別。 |
const_iterator |
型別,表示並行佇列中元素的非線程安全 const 反覆運算器。 |
const_reference |
型別,提供儲存在並行佇列中之元素的參考 const ,以便讀取和執行 const 作業。 |
difference_type |
類型,提供並行佇列中兩個專案之間的帶正負號距離。 |
iterator |
型別,表示並行佇列中專案上的非線程安全反覆運算器。 |
reference |
型別,提供儲存在並行佇列中之項目的參考。 |
size_type |
計算並行佇列中項目數目的類型。 |
value_type |
型別,表示儲存在並行佇列中的數據類型。 |
公用建構函式
名稱 | 描述 |
---|---|
concurrent_queue | 已多載。 建構並行佇列。 |
~concurrent_queue解構函式 | 終結並行佇列。 |
公用方法
名稱 | 描述 |
---|---|
clear | 清除並行佇列,終結任何目前加入佇列的專案。 這個方法不是並行安全的方法。 |
empty | 測試在呼叫這個方法時,並行佇列是否為空的。 此方法是並行安全的方法。 |
get_allocator | 傳回用來建構並行佇列的配置器複本。 此方法是並行安全的方法。 |
push | 已多載。 將專案加入佇列並行佇列結尾處。 此方法是並行安全的方法。 |
try_pop | 如果有專案可用,請從佇列中清除專案。 此方法是並行安全的方法。 |
unsafe_begin | 已多載。 傳回 類型 iterator 為 或 const_iterator 的反覆運算器至並行佇列的開頭。 這個方法不是並行安全的方法。 |
unsafe_end | 已多載。 傳回類型 iterator 為 或 const_iterator 的反覆運算器至並行佇列的結尾。 這個方法不是並行安全的方法。 |
unsafe_size | 傳回佇列中的項目數。 這個方法不是並行安全的方法。 |
備註
如需詳細資訊,請參閱 平行容器和物件。
繼承階層架構
concurrent_queue
需求
標頭: concurrent_queue.h
命名空間: concurrency
clear
清除並行佇列,終結任何目前加入佇列的專案。 這個方法不是並行安全的方法。
void clear();
concurrent_queue
建構並行佇列。
explicit concurrent_queue(
const allocator_type& _Al = allocator_type());
concurrent_queue(
const concurrent_queue& _OtherQ,
const allocator_type& _Al = allocator_type());
concurrent_queue(
concurrent_queue&& _OtherQ,
const allocator_type& _Al = allocator_type());
template<typename _InputIterator>
concurrent_queue(_InputIterator _Begin,
_InputIterator _End);
參數
_InputIterator
指定值範圍的輸入反覆運算器型別。
_鋁
搭配這個物件使用的配置器類別。
_OtherQ
要從中複製或移動項目的來源 concurrent_queue
物件。
_開始
項目範圍中要複製的第一個項目位置。
_結束
項目範圍之外要複製的第一個項目位置。
備註
所有建構函式都會儲存配置器物件 _Al
,並初始化佇列。
第一個建構函式會指定空的初始佇列,並明確指定要使用的配置器類型。
第二個建構函式會指定並行佇列 _OtherQ
的複本。
第三個建構函式會指定並行佇列 _OtherQ
的移動作業。
第四個建構函式會指定反覆運算器範圍 [ 、 _Begin
_End
所提供的值。
~concurrent_queue
終結並行佇列。
~concurrent_queue();
empty
測試在呼叫這個方法時,並行佇列是否為空的。 此方法是並行安全的方法。
bool empty() const;
傳回值
true
如果同時佇列在我們查看的那一刻是空的,則為 , false
否則為 。
備註
雖然此方法在呼叫 方法 push
、 try_pop
和 empty
時是並行安全,但呼叫線程檢查傳回的值可能不正確。
get_allocator
傳回用來建構並行佇列的配置器複本。 此方法是並行安全的方法。
allocator_type get_allocator() const;
傳回值
用來建構並行佇列的配置器複本。
push
將專案加入佇列並行佇列結尾處。 此方法是並行安全的方法。
void push(const T& _Src);
void push(T&& _Src);
參數
_Src
要加入至佇列的專案。
備註
push
對方法 push
、 try_pop
和 empty
的呼叫而言,是並行安全。
try_pop
如果有專案可用,請從佇列中清除專案。 此方法是並行安全的方法。
bool try_pop(T& _Dest);
參數
_Dest
要儲存已清除佇列專案之位置的參考。
傳回值
true
如果專案已成功清除佇列,則為 , false
否則為 。
備註
如果成功取消佇列項目,參數 _Dest
會接收已清除佇列的值、佇列中保留的原始值會終結,而且此函式會傳 true
回 。 如果沒有要清除佇列的專案,此函式會傳回 false
而不封鎖,且未定義 參數的內容 _Dest
。
try_pop
對方法 push
、 try_pop
和 empty
的呼叫而言,是並行安全。
unsafe_begin
傳回 類型 iterator
為 或 const_iterator
的反覆運算器至並行佇列的開頭。 這個方法不是並行安全的方法。
iterator unsafe_begin();
const_iterator unsafe_begin() const;
傳回值
類型 iterator
為 或的反覆運算器,或 const_iterator
並行佇列物件的開頭。
備註
類別的 concurrent_queue
反覆運算器主要用於偵錯,因為它們很慢,而且反覆項目對於其他佇列作業而言並非並行安全。
unsafe_end
傳回類型 iterator
為 或 const_iterator
的反覆運算器至並行佇列的結尾。 這個方法不是並行安全的方法。
iterator unsafe_end();
const_iterator unsafe_end() const;
傳回值
類型 iterator
為 或 const_iterator
到並行佇列結尾的反覆運算器。
備註
類別的 concurrent_queue
反覆運算器主要用於偵錯,因為它們很慢,而且反覆項目對於其他佇列作業而言並非並行安全。
unsafe_size
傳回佇列中的項目數。 這個方法不是並行安全的方法。
size_type unsafe_size() const;
傳回值
並行佇列的大小。
備註
unsafe_size
不是並行安全,而且如果同時呼叫 方法 push
、 try_pop
和 empty
,可能會產生不正確的結果。