Add thread safety for std::shared_object_ptr
This commit is contained in:
parent
3980f859b7
commit
bdbe065c23
|
@ -281,6 +281,10 @@ else()
|
||||||
set(framework_LIBRARIES ${framework_LIBRARIES} ${SYSTEM_LIBRARIES})
|
set(framework_LIBRARIES ${framework_LIBRARIES} ${SYSTEM_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(FRAMEWORK_THREAD_SAFE)
|
||||||
|
set(framework_DEFINITIONS ${framework_DEFINITIONS} -DTHREAD_SAFE)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(FRAMEWORK_GRAPHICS)
|
if(FRAMEWORK_GRAPHICS)
|
||||||
set(OPENGLES "OFF" CACHE "Use OpenGL ES 1.0 or 2.0 (for mobiles devices)" STRING)
|
set(OPENGLES "OFF" CACHE "Use OpenGL ES 1.0 or 2.0 (for mobiles devices)" STRING)
|
||||||
if(OPENGLES STREQUAL "2.0")
|
if(OPENGLES STREQUAL "2.0")
|
||||||
|
|
|
@ -28,12 +28,16 @@
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
|
||||||
|
#ifdef THREAD_SAFE
|
||||||
|
#include <atomic>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace stdext {
|
namespace stdext {
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
class shared_object_ptr;
|
class shared_object_ptr;
|
||||||
|
|
||||||
typedef unsigned int refcount_t;
|
typedef unsigned long refcount_t;
|
||||||
|
|
||||||
class shared_object
|
class shared_object
|
||||||
{
|
{
|
||||||
|
@ -49,7 +53,11 @@ public:
|
||||||
template<typename T> stdext::shared_object_ptr<T> const_self_cast() { return stdext::shared_object_ptr<T>(const_cast<T*>(this)); }
|
template<typename T> stdext::shared_object_ptr<T> const_self_cast() { return stdext::shared_object_ptr<T>(const_cast<T*>(this)); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
#ifdef THREAD_SAFE
|
||||||
|
std::atomic<refcount_t> m_refs;
|
||||||
|
#else
|
||||||
refcount_t m_refs;
|
refcount_t m_refs;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|
Loading…
Reference in New Issue