2

我有一个高度多线程的程序,它包含一个侵入性的对象链接列表。我需要将此列表中的对象传递给多个线程,但一次只有 1 个线程拥有该对象,这意味着我不需要共享该对象或指向它的指针。

我想使用 boost 创建一个带有 unique_ptr 的侵入性列表,但从我读过的内容来看,unique_ptr 与 Boost 侵入式库不兼容,因为它没有正确的所有权语义。

根据这个,侵入式库要求它的元素(指针)具有与原始指针相同的所有权语义。所以 unique_ptr 甚至 shared_ptr 都不符合条件。

我想知道是否有人可以就如何最好地实现我的侵入式列表给我一些建议,以便我可以安全地通过多个线程传递它的元素并知道它们被移动到该线程而不是在线程之间共享?

4

1 回答 1

1

据我所知,要使其正常工作,您将需要某种auto-unlink hooks

由于侵入式容器不拥有它包含的对象,因此将 unique_ptrs 引用的原始指针添加到侵入式容器应该没有任何问题。

如果您需要能够从侵入式列表中的原始指针访问实际的 unique_ptr,那么enable_shared_from_this的某些内容可能会有所帮助。(您需要将侵入式容器与侵​​入式 unique_ptr 结合起来。)


经过一番思考,似乎确实没有侵入性的 unique_ptr 变体,因为智能指针的“侵入性”部分通常用于引用计数,而类似 unique_ptr 的对象没有引用计数。

可能你最好为此使用 shared_ptr,因为它已经启用了_shared_from_this。

于 2010-10-07T09:35:57.233 回答