OpenThreads.ReentrantMutex是OpenSceneGraph中的线程工具类,可用于保护共享资源不被多个线程同时访问。
OpenThreads.ReentrantMutex 类实现了一个可重入的互斥锁,多次加锁不会死锁,只有相同次数的解锁操作之后,该锁才能被其他线程占用。它的作用与OpenThreads.Mutex相同,但OpenThreads.ReentrantMutex支持多次对同一个线程加锁,因此适用于某些更加复杂的程序。
#include <OpenThreads/ReentrantMutex>
class OpenThreads::ReentrantMutex;
ReentrantMutex(bool recursive=false);
该构造函数初始化一个可重入互斥锁,并设置是否允许递归加锁。参数recursive默认值为false,表示不允许递归加锁;如果设置为true,则表示允许递归加锁。
void lock();
该方法对互斥锁进行加锁操作。
bool trylock();
该方法尝试对互斥锁进行加锁操作,如果锁已被占用则返回false,否则返回true。
void unlock();
该方法进行解锁操作。
#include <iostream>
#include <OpenThreads/ReentrantMutex>
OpenThreads::ReentrantMutex mutex;
void task()
{
mutex.lock();
std::cout << "Thread " << OpenThreads::Thread::CurrentThread() << " is running." << std::endl;
mutex.unlock();
}
int main()
{
OpenThreads::Thread* thread1 = new OpenThreads::Thread(&task);
OpenThreads::Thread* thread2 = new OpenThreads::Thread(&task);
thread1->start();
thread2->start();
thread1->join();
thread2->join();
return 0;
}
上述代码创建了一个可重入互斥锁,并在两个线程中调用task函数。每个线程在访问共享资源时都会对互斥锁进行加锁和解锁操作。