-
各种锁
-
Mutex 可以重复加的锁,继承了MutexImpl—它在构造的函数内初始化。
-
FastMutex 与mutex有点类似,不同的是,在同一线程内试图加第二次锁时会阻塞。FastMutex 比Mutex上锁速度更快。
-
ScopedLock 加锁后ScopedLock变量销毁时自动解锁,实际上是一个模板,可使用FastMutex,FastMutex, NullMutex进行实例化,不能单独使用。
-
成员函数
-
Bool FastMutex::lock();试图对mutex加锁,如果mutex已被其它线程锁定则阻塞。
-
Bool FastMutex::lock(long msec);试图对mutex加锁,如果mutex已被其它线程锁定则阻塞msec后抛出TimeoutException;成功则返回true。
-
bool FastMutex::tryLock(long msec);试图对mutex加锁,如果失败则阻塞msec后返回, 成功true,失败false。
-
ScopedLock(M& mutex){mutex.lock();}
-
ScopedLock(M& mutex, long milliseconds){mutex.lock(milliseconds);}
-
实现原理:
-
Mutex.lock
-
FastMutex.lock
-
ScopedLock
-
tryLock的实现
-
实例:
-
FastMutex
Poco::FastMutex* _pFastMtx = new Poco::FastMutex();
Void* thread( void* arg )
{
_pMtxRedis->lock();
cout<< "FastMutexlocked:" << args<< "; counte=" << g_count++ << endl;
sleep(2);
_pMtxRedis->unlock();
cout<< "FastMutexexit:" << args<< "; counte=" << g_count << endl;
return NULL;
}
-
ScopedLock (FastMutex)
Poco::FastMutex* _pFastMtx = new Poco::FastMutex();
void* thread(void* arg )
{
Poco::FastMutex::ScopedLocklock(*_pFastMtx);//实例化模板并调用(阻塞)锁
cout << "scope locked:" << arg<< "; counte=" << g_count++ << endl;
sleep(1);
cout << "scope exit:" << arg << "; counte=" << g_count << endl;
}