共享互斥量

共享互斥变量shared_mutex允许线程获取多个共享所有权和一个专享所有权,即多个读进程一个写进程。
读锁定时使用boost::shared_lock<boost::shared_mutex>,写锁定时使用boost::unique_lock<boost::shared_mutex>。

 

#include <boost/thread.hpp>
#include <boost/ref.hpp>
#include <iostream>

boost::mutex io_mu;

class rw_data
{
private:
	int m_x; // 用于读写的数据
	boost::shared_mutex rw_mu; // 共享互斥量
public:
	rw_data() :m_x(0){}
	void write()
	{
		boost::unique_lock<boost::shared_mutex> lock(rw_mu); // 写锁定
		++m_x;
		boost::mutex::scoped_lock io_lock(io_mu);
		std::cout << "write: " << m_x << std::endl;
	}
	void read(int *x)
	{
		boost::shared_lock<boost::shared_mutex> lock(rw_mu); // 读锁定
		*x = m_x;
	}
};

void writer(rw_data &data) // 写线程
{
	for (int i = 0; i < 10; ++i)
	{
		boost::this_thread::sleep(boost::posix_time::milliseconds(10)); // 睡眠
		data.write();
	}
}
void reader(rw_data &data) // 读线程
{
	int x;
	for (int i = 0; i < 10; ++i)
	{
		boost::this_thread::sleep(boost::posix_time::milliseconds(5)); // 睡眠
		data.read(&x);
		boost::mutex::scoped_lock lock(io_mu);
		std::cout << "reader: " << x << std::endl;
	}
}
int main()
{

	rw_data d;
	boost::thread_group pool;
	pool.create_thread(boost::bind(reader, boost::ref(d)));
	pool.create_thread(boost::bind(reader, boost::ref(d)));
	pool.create_thread(boost::bind(reader, boost::ref(d)));
	pool.create_thread(boost::bind(reader, boost::ref(d)));
	pool.create_thread(boost::bind(writer, boost::ref(d)));
	pool.create_thread(boost::bind(writer, boost::ref(d)));
	pool.join_all();
	return 0;
}

  

转载于:https://www.cnblogs.com/ACGame/p/9108440.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值