您当前的位置: 首页 >  c++

小林coding

暂无认证

  • 1浏览

    0关注

    167博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ 并发编程之互斥锁和条件变量的性能比较

小林coding 发布时间:2019-09-01 10:33:14 ,浏览量:1

介绍

本文以最简单生产者消费者模型,通过运行程序,观察该进程的cpu使用率,来对比使用互斥锁 和 互斥锁+条件变量的性能比较。

本例子的生产者消费者模型,1个生产者,5个消费者。 生产者线程往队列里放入数据,5个消费者线程从队列取数据,取数据前需要判断一下队列中是否有数据,这个队列是全局队列,是线程间共享的数据,所以需要使用互斥锁进行保护。即生产者在往队列里放入数据时,其余消费者不能取,反之亦然。

互斥锁实现的代码
#include  // std::cout
#include     // std::deque
#include    // std::thread
#include    // std::chrono
#include     // std::mutex


// 全局队列
std::deque g_deque;

// 全局锁
std::mutex g_mutex;

// 生产者运行标记
bool producer_is_running = true;

// 生产者线程函数
void Producer()
{
	// 库存个数
    int count = 8;
    
    do
    {
		// 智能锁,初始化后即加锁,保护的范围是代码花括号内,花括号退出即会自动解锁
		// 可以手动解锁,从而控制互斥锁的细粒度
        std::unique_lock locker( g_mutex );
		// 入队一个数据
        g_deque.push_front( count );
		// 提前解锁,缩小互斥锁的细粒度,只针对共享的队列数据进行同步保护
        locker.unlock(); 

        std::cout             
关注
打赏
1659932071
查看更多评论
0.0475s