Sqe*_*aky 3 c++ multithreading thread-safety shared-ptr c++11
对于我正在编写的一段多平台 C++ 代码,我需要一个共享指针。目前该项目不使用 boost,从管理的角度来看,将其引入将极其困难或不可能。但是,我可以使用精选的 C++11 功能,包括共享指针。
标准共享指针存在问题,它们保证线程安全。这意味着在某些平台/编译器上,例如 GCC ( http://tinyurl.com/GCCSharedPtrLockPolicy ) 原子和互斥锁将被不必要地使用,但至少我可以检查并解决由此引起的问题。然后对于其他平台(http://tinyurl.com/msvscSharedPtr),甚至似乎没有一种方法可以检查使用了哪些线程安全机制。原始的 boost 指针只提供最基本的线程安全保证(http://tinyurl.com/SharedPtrThreadSafety)。
我的核心问题是,在某些平台上,原子会导致 CPU 缓存之间代价高昂的同步,而不需要的互斥体可能会导致对操作系统的调用可能由于不完全相关的原因而延迟。此代码将是多线程的,但我们还有其他同步方法用于在线程之间移动数据。根本不需要或不需要线程安全的共享指针。
通常,我更愿意进行基准测试并做出决定,但由于这将在其上运行和移植的平台,我实际上无法这样做。我需要在一些不太流行的平台上进行测试,这些平台往往存在优化程度较低的编译器,但我目前没有这种能力。
我将尝试推动获得 Boost 指针,但这不太可能,当失败时我还有哪些其他选择?与此同时,我将研究试图让 Shared_ptr 脱离 boost,但我认为这并不容易。
我可以自己动手。这似乎是一个糟糕的主意,为什么我必须重新发明这种基本的东西。
如果有一个简单的库并且有足够的许可,那么我可以简单地复制他们的 shared_ptr 代码并简化我自己的滚动。
编辑:除了头文件库之外,从 boost 中提取任何东西都已被剔除。我将按照回答者的建议之一研究 Loki。如果失败并且这里没有答案,我将推出自己的:(。