boost mutex lock学习及测试
2016-03-11 10:16
295 查看
boost真是博大精深呀
这次学习了一下几本的锁和信号量。
其中包含:mutex recursive_mutex lock unique_lock basic_lockable_adpator timed_lockable_adpator,其他的adpator应该也都一样,例如(shared_lockable_adaptor等)
参看:http://www.boost.org/doc/libs/1_60_0/doc/html/thread/synchronization.html
这次学习了一下几本的锁和信号量。
其中包含:mutex recursive_mutex lock unique_lock basic_lockable_adpator timed_lockable_adpator,其他的adpator应该也都一样,例如(shared_lockable_adaptor等)
参看:http://www.boost.org/doc/libs/1_60_0/doc/html/thread/synchronization.html
#include <iostream> #include <boost/thread/thread.hpp> #include <boost/thread/mutex.hpp> #include <boost/thread/recursive_mutex.hpp> #include <boost/thread/locks.hpp> #include <boost/thread/lockable_concepts.hpp> #include <boost/thread/lockable_adapter.hpp> class BankAccount { int _balance; boost::mutex _mtx; public: BankAccount(int init = 0): _balance(init){ } void deposit(int amount) { boost::lock_guard<boost::mutex> guard(_mtx); _balance += amount; } void withDraw(int amount) { boost::lock_guard<boost::mutex> guard(_mtx); _balance += amount; } int getBalance() { boost::lock_guard<boost::mutex> guard(_mtx); return _balance; } void lock() { _mtx.lock(); } void unlock() { _mtx.unlock(); } }; class A : public boost::basic_lockable_adapter<boost::mutex> { public: int _a; A(int a = 10): _a(a){ } void show() { std::cout << _a << std::endl; } }; class B : public boost::basic_lockable_adapter<boost::recursive_mutex> { //可重入 即:可同一线程多次锁一个信号量 public: int _a; B(int a = 10): _a(a){ } void show() { std::cout << _a << std::endl; } }; class C : public boost::timed_lockable_adapter<boost::mutex> { public: int _a; C(int a = 10): _a(a){ } void show() { std::cout << _a << std::endl; } }; void ATMWithDraw(BankAccount& account, int amount) { // boost::recursive_mutex; account.lock(); account.withDraw(amount); account.withDraw(2); account.unlock(); } int main () { BankAccount wangbing; wangbing.deposit(100); std::cout << wangbing.getBalance() << std::endl; ATMWithDraw(wangbing, 10); A lockable_a; lockable_a.lock(); lockable_a.show(); lockable_a.unlock(); // B b; // boost::lock_guard<B> recusive_lock(b); //构造函数自动锁b //C c; //c.try_lock_until( boost::chrono::time_point); std::cout << "wangbing" << std::endl; }
g++ lock.cpp -lboost_thread -lboost_system
相关文章推荐
- boost相关小知识(长期顶置更新)
- 基于oracle中锁的深入理解
- C#多线程编程中的锁系统(三)
- MySQL中Innodb的事务隔离级别和锁的关系的讲解教程
- Redis数据库中实现分布式锁的方法
- php session的锁和并发
- C#多线程编程中的锁系统基本用法
- PHP通过插入mysql数据来实现多机互锁实例
- Java锁之阻塞锁介绍和代码实例
- Java中的线程同步与ThreadLocal无锁化线程封闭实现
- Mysql数据库锁定机制详细介绍
- 简要讲解Python编程中线程的创建与锁的使用
- python多线程threading.Lock锁用法实例
- 举例讲解Python中的死锁、可重入锁和互斥锁
- C++单元测试:boost.test
- 自旋锁学习系列(3):指数后退技术
- boost asio学习笔记 [1] - 同步通讯
- boost_asio学习笔记[2] - 客户端异步通讯
- 读书笔记之《Java并发编程的艺术》-java中的锁