可以做长页的网站,wordpress.商品,简单网站建设报价单,织梦的手机端网站模板下载地址boost锁的概述#xff1a;boost库中提供了mutex类与lock类#xff0c;通过组合可以轻易的构建读写锁与互斥锁。举个通俗的例子#xff0c;如果共享资源是一个自动锁住的房间#xff0c;互斥体是钥匙#xff0c;进入房间必须取钥匙#xff0c;离开房间应该还钥匙。这就对应…boost锁的概述boost库中提供了mutex类与lock类通过组合可以轻易的构建读写锁与互斥锁。举个通俗的例子如果共享资源是一个自动锁住的房间互斥体是钥匙进入房间必须取钥匙离开房间应该还钥匙。这就对应着互斥体的lock(取钥匙)和unlock(还钥匙)。动态分配内存存在类似的情况。如果忘记delete会导致内存泄漏。它是如何解决的在栈上分配对象要一个特点那就是离开作用域后对象肯定要调用析构方法。利用这个特点可以使用对象对指针封装在对象的析构方法中进行delete就保证了一定会执行delete。这就是智能指针。因为智能指针不是针对一个特定类型的指针因此把智能指针设计为类的模版根据模版实参特例化一个模板类。同样道理也可以使用相同技术对互斥体封装。这就是lock类模版。在lock的构造方法调用互斥体的lock方法在lock的析构方法调用互斥体的unlock方法。mutex是对象类lock是模板类。mutex对象类mutex类主要有两种boost::mutexboost::shared_mutex其中mutex有lock和unlock方法shared_mutex除了提供lock和unlock方法外还有shared_lock和shared_unlock方法。因此boost::mutex为独占互斥类boost::shared_mutex为共享互斥类。lock模板类boost::unique_lockboost::shared_lock其中unique_lock为独占锁shared_lock为共享锁。unique_lock中的T可以为mutex类中的任意一种如果为shared_mutex那么boost::unique_lock:shared_mutex类的对象构造函数构造时会自动调用shared_mutex的shared_lock方法析构函数里会自动调用shared_mutex的shared_unlock方法。如果是boost::unique_lock:mutex则分别自动调用lock和unlock方法。boost::shared_lock中的T只能是shared_mutex类。读写锁的实现typedefboost::shared_lock:shared_mutex readLock;typedef boost::unique_lock:shared_mutex writeLock;boost::shared_mutex rwmutex;void readOnly( ){readLock rdlock( rwmutex );/// do something}void writeOnly( ){writeLock wtlock( rwmutex );/// do something}对同一个rwmutex线程可以同时有多个readLock这些readLock会阻塞任意一个企图获得writeLock的线程直到所有的readLock对象都析构。如果writeLock首先获得了rwmutex那么它会阻塞任意一个企图在rwmutex上获得readLock或者writeLock的线程。boost::shared_lock使用要小心千万不要同一个线程多次进入。互斥锁的实现typedef boost::unique_lock:mutex exclusiveLock;递归式的互斥量boost::recursive_mutex提供一个递归式的互斥量。对于一个实例最多允许一个线程拥有其锁定如果一个线程已经锁定一个boost::recursive_mutex实例那么这个线程可以多次锁定这个实例。boost::mutex::scoped_lockboost::mutexio_mutex;void foo( ){{boost::mutex::scoped_lock lock( io_mutex); ///锁定} ///解锁}