Poco FastMutex 小结


  1. 各种锁

  • Mutex 可以重复加的锁,继承了MutexImpl—它在构造的函数内初始化。

  • FastMutex mutex有点类似,不同的是,在同一线程内试图加第二次锁时会阻塞。FastMutex Mutex上锁速度更快。

  • ScopedLock 加锁后ScopedLock变量销毁时自动解锁,实际上是一个模板,可使用FastMutexFastMutex, NullMutex进行实例化,不能单独使用

     

  1. 成员函数

  • 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);}

     

  1. 实现原理:

  • Mutex.lock  

  • FastMutex.lock

  • ScopedLock

     

  • tryLock的实现

     

  1. 实例:

  1. 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;

    }

  2. 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;

    }

     

     

你可能感兴趣的:(POCO学习)