OpenThreads.AtomicPtr是OpenSceneGraph中的一个用于原子操作的指针类。它是Atomic操作的管理器。
AtomicPtr()
构造一个AtomicPtr对象,指向空指针。
AtomicPtr(T* ptr)
构造一个AtomicPtr对象,指向T类型的指针ptr。
AtomicPtr(const AtomicPtr& rhs)
拷贝构造一个AtomicPtr对象,指向另一个AtomicPtr对象rhs。
T* getPtr() const
返回AtomicPtr对象中存储的指针。
T* operator ->() const
返回AtomicPtr对象中存储的指针。
T& operator *() const
返回AtomicPtr对象中存储的指针所指向的对象。
AtomicPtr& operator =(T* ptr)
将AtomicPtr对象指向T类型的指针ptr。
AtomicPtr& operator =(const AtomicPtr& rhs)
将AtomicPtr对象指向另一个AtomicPtr对象rhs。
bool compareAndSet(T* expectedValue, T* newValue)
如果AtomicPtr对象中存储的指针值等于expectedValue,则将该指针值设置为newValue,并返回true。否则不做任何操作,并返回false。
#include <osg/AtomicPtr>
osg::ref_ptr<osg::Node> node1 = new osg::Node();
osg::ref_ptr<osg::Node> node2 = new osg::Node();
osg::AtomicPtr<osg::Node> atomicNode(node1.get()); // 创建一个AtomicPtr对象,指向node1
osg::Node* oldNode = atomicNode.getPtr(); // 获取AtomicPtr对象中存储的指针
if (oldNode == node1.get())
{
atomicNode = node2.get(); // 将AtomicPtr对象指向node2
}
上面的示例中,我们创建了两个osg::Node对象node1和node2,并将node1存储在AtomicPtr对象中。随后,我们通过getPtr()函数获取AtomicPtr对象中存储的指针,判断指针是否指向node1。如果指针确实指向node1,则将AtomicPtr对象指向node2,即通过"oldNode == node1.get()"判断成功后将"atomicNode = node2.get()"来更新指针的存储内容。