2012-03-28 43 views
1

該文件不是非常明確的如何不安全concurrent_queue::unsafe_size()是。TBB concurrent_queue,unsafe_size是不安全的?

tbb/internal/concurrent_queue.h提到的文件中的doxygen的評論:隊列的

獲取大小;如果隊列被修改 結果可能是無效的同時

什麼我想知道是將它在過去的某個點返回一個有效的大小,或可將其退回垃圾? (假設幾個線程都是讀和寫)。

我不感興趣的確切價值,但更多的「負載」指示。當消費者線程出現問題時,我想阻止隊列爆炸。我會使用concurrent_bounded_queue,因爲名稱建議有容量控制,但我會失去無鎖的屬性。

回答

1

你真的應該把它當作垃圾,因爲它被標記爲不安全。我認爲它實際上可能會返回有問題的數字,因爲如果內存服務它推動和流行之間的真正的區別。但即使它是「安全」的,它仍然只會返回一個過去有效的數字,這是等待免費節目的樂趣之一。 如果您確實需要推理計數,則在保存隊列的類中存儲原子計數。

是否有您沒有使用TBB的任務原語的一個,而不是建立自己的理由嗎?

+0

我們不使用任務的原因是就業機會是非常小的(一個插座上,即同步發送)和總是相同(只有輸入參數的變化,而不是函數的調用)。因此,我們的任務可能不適合這種情況。儘管如此,我們還沒有完全排除任務,我們仍在評估不同的可能性。隊列似乎是一個更好的開始(編輯:並可能嘗試管道後,更適合我們目前的「數據流」)。 – 2012-03-28 23:29:31

+0

(感謝您的回答) – 2012-03-29 00:09:26

相關問題