2010-10-07 18 views
1

我有一個高度多線程的程序,它包含一個入侵鏈接的對象列表。我需要將這個列表中的對象傳遞給多個線程,但是一次只有一個線程擁有這個對象,這意味着我不需要這個對象或指向它的指針被共享。unique_ptrs的入侵列表?

我想用unique_ptr創建一個使用boost的入侵列表,但是從我讀過的內容來看,unique_ptr不會與Boost入侵庫兼容,因爲它沒有正確的所有權語義。

根據this侵入庫要求它的元素(指針)與原始指針具有相同的所有權語義。所以unique_ptr或者甚至shared_ptr都不合格。

我想知道是否有人可以給我一些關於如何最好地實現我的入侵列表的建議,然後我可以安全地通過幾個線程傳遞它的元素,並知道他們正在被移動到該線程,而不是在線程之間共享?

+0

我沒有得到的是爲什麼對你來說*對象的*指針只能從一個線程引用是很重要的。 (它們不是,因爲它至少是來自侵入式容器*和*每個智能指針。) – 2010-10-07 10:38:10

+0

我只是認爲從線程安全的角度來看它會更好,因爲如果只有一個線程有一個參考,不會有線程安全問題。看起來很明顯,我沒有考慮清單本身... – 2010-10-07 11:42:54

回答

0

據我所知,爲了這項工作,你需要某種auto-unlink hooks

由於侵入式容器確實有而不是擁有它包含的對象,所以添加入您的unique_ptrs引用的原始指針對侵入式容器應該沒有任何問題。

如果您需要能夠從侵入列表中的原始指針訪問實際的unique_ptr,那麼沿着enable_shared_from_this行的內容可能會有所幫助。 (你需要你的介入式容器具有侵入性的unique_ptr結合起來。)


想着它有點似乎真的沒有侵入的unique_ptr變種那裏後,因爲「侵擾」的一部分對於智能指針通常用於引用計數,而unique_ptr類似對象沒有引用計數。

也許你會最好的使用shared_ptr,因爲它已經有了enabled_shared_from_this。

+0

這聽起來很有趣。所以我會將原始指針粘貼在我的容器中,當我需要使用它們時,我使用一種enable_shared_from_this構造將它們轉換回unique_ptr ...您可以詳細說明一下您的想法嗎? – 2010-10-07 09:42:49