boost mutex lock学习及测试

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

#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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值