【发布时间】:2011-04-22 06:27:07
【问题描述】:
我有一个高度多线程的程序,它包含一个侵入性的对象链接列表。我需要将此列表中的对象传递给多个线程,但一次只有 1 个线程拥有该对象,这意味着我不需要共享此对象或指向它的指针。
我想使用 boost 创建一个带有 unique_ptr 的侵入式列表,但据我所知,unique_ptr 与 Boost 侵入式库不兼容,因为它没有正确的所有权语义。
根据this,侵入式库要求其元素(指针)具有与原始指针相同的所有权语义。所以 unique_ptr 甚至 shared_ptr 都不符合条件。
我想知道是否有人可以就如何最好地实现我的侵入式列表给我一些建议,以便我可以安全地通过多个线程传递它的元素并知道它们正在被移动到该线程而不是在线程之间共享?
【问题讨论】:
-
我不明白为什么指向您的对象的 指针 仅从一个线程引用对您很重要。 (无论如何它们都不是,因为它们至少是从侵入式容器和每个智能指针引用的。)
-
我只是认为从线程安全的角度来看会更好,因为如果只有1个线程有引用,就不会有线程安全问题。看来我显然没有考虑列表本身...
标签: c++ pointers ownership intrusive-containers