【发布时间】:2011-08-22 12:39:59
【问题描述】:
指针跟踪在 boost 序列化中是如何工作的?我用它来序列化系统组件之间的消息,我的印象是我得到了很多不正确的共享对象。是否有可能如果我使用指向要序列化的对象的共享指针并且新对象恰好与已被删除的先前对象具有相同的地址,这将被错误地捕获为共享引用?
【问题讨论】:
-
这是单线程的,而不是序列化过程中大量线程之间的可怕竞争条件,对吧?
-
是的,应该都相当安全。它是由单个消费者线程添加的所有共享指针。
-
但是序列化操作根本不是原子操作 - 遍历所有需要序列化的对象可能需要很长时间,并且在此期间一个或多个可能已经改变,除非你是确保没有人可能改变。它永远不会与 shared_ptr 一起崩溃,但它很可能会产生您描述的那种不一致的状态。
-
我不认为这是正在发生的事情。我认为这更多的是你得到一个指向某个地址的共享指针,它被序列化,删除,一个新的共享指针被创建,巧合的相同地址,它被序列化,并被选为错误的共享地址......我解决了它通过禁用跟踪
-
@Cookie:你所描述的正是你被告知不能发生的事情。当对象被序列化时,它不能被修改。以任何方式。完全没有。没有人。
标签: c++ serialization boost