这是来自threadsanitazer(clang)的一个粘贴报告 数据 </跨度> 种族http://pastebin.com/93Gw7uPi
谷歌搜索它似乎这是threadsanitazer的问题(例如http://gcc.gnu.org 线程作为start_and_do_async运行所以没有 数据 </跨度> 种族可能发生(在这种情况下,io_service是线程安全的) thread_service.post [我]() { my.stop(); //这将最终破坏myclass并释放
假设 shared_ptr 线程安全文档与其实现相匹配,然后是数据竞争的报告 shared_ptr 是假阳性。线程在不同的实例上运行 shared_ptr 共享同一实例的所有权。因此,没有相同的访问权限 shared_ptr 实例。
shared_ptr
话虽如此,我确实想强调一下,在示例中,线程的安全性 myclass::usocket_ 仅依赖于单个线程处理 io_service ,有效地执行一个隐含的 缕 。如果有多个线程服务的话 io_service ,然后一个明确的 strand 可用于提供线程安全性。有关Boost.Asio和。的一些线程安全细微之处的更多详细信息 strands ,考虑阅读 这个 回答。
myclass::usocket_
io_service
strand
strands