c++并发编程 - Boost Thread

本文深入探讨了Boost Thread库,包括线程组的创建与管理,互斥锁(Mutex)的概念,以及lock_guard和unique_lock的使用。详细介绍了lock_guard的自动加锁和解锁特性,unique_lock的灵活性,以及condition_variable的同步与唤醒功能。通过实例代码展示了如何在多线程环境中确保数据一致性。
摘要由CSDN通过智能技术生成

0x00 摘要

在分析比特币源码时,最开始就简单学习了一些boost thread的简单用法和最基本的互斥锁,但看到后面发现还用到了更深层次的并发编程知识,于是又回来完整的学习一下,这里做个学习的总结。本文的内容主要包括线程组(Thread group)以及各种互斥锁(lock_guard, unique_lock)以及更高级一点的condition variable

0x01 Thread Group

Thread group其实和thread没有太大的区别,就是把线程放到一起使用简单的操作进行批量处理,根据http://www.boost.org/doc/libs/1_53_0/boost/thread/detail/thread_group.hpp,总共有以下几个操作,

  • thread* create_thread(F threadfunc); //创建新线程
  • void add_thread(thread* thrd); //添加线程
  • void remove_thread(thread* thrd); // 删除线程
  • void join_all(); // 等待所有线程结束
  • void interrupt_all(); // 中断所有线程
  • size_t size() const; // 返回线程数量

0x02 Mutex

多线程访问共享变量时,如果不对共享变量做一定的限制,由于线程的随机性,可能就会造成无法预知的结果,而这其中最简单也是目前最常用的方式就是互斥锁,也就是每次只允许一个线程访问,如果已经有一个线程在访问共享变量其他线程再访问时则会进入阻塞状态,从而保证程序的确定性与一致性,一个简单的例子如下,

#include "boost/thread.hpp"
#include <iostream>
using namespace std;

boost::mutex mutex;
int id = 0;

void<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值