代码:

  // boost库 条件变量 使用测试 

#include <iostream>
#include <boost/thread.hpp>
using namespace std; boost::condition_variable cond; //关联多个线程的条件变量
boost::mutex mutex; //保护共享资源的互斥体
int k=0; //作为共享资源 void func1(const int &id)
{
boost::unique_lock<boost::mutex> lock(mutex); // m->lock(); cout << "thread #hi#" << id << endl; #if 1
static int i = 0;
if(i++ == 1) // 第二个线程执行本函数,我就上锁两次,应该会锁死第二个线程自身。
boost::unique_lock<boost::mutex> lock_again(mutex); // m->lock();
#endif cout << "func1, k = " << k << endl;
while(k<5)
{
cout << "thread #" << id << " : k<5, waiting..." << endl;
cond.wait(lock);
}
cout << "thread #" << id << " : now k>5, printing..." << endl;
}
void func2(const int &id)
{
cout << "thread #hi#" << id << endl;
boost::unique_lock<boost::mutex> lock(mutex);
cout << "func2, k = " << k << endl;
cout << "thread #" << id << " : k will be changed..." << endl;
k+=5; // 模拟操作共享资源 , 在锁的保护下,此时生产者是独占性操作共享资源 cond.notify_all();//唤醒所有的等待线程
//cond.notify_one();//只会唤醒一个等待线程
} int main()
{
// 这个线程应该会顺利执行完毕
boost::thread t1(func1, 1);
boost::this_thread::sleep(boost::posix_time::seconds(1)); // 这个线程内,上锁两次,应该会锁死本线程
boost::thread t2(func1, 2); // 那么主线程还能继续向下执行吗 实测说话
// 实测能继续向下执行,
//实测,使用boost库的互斥锁和linux上的一模一样
cout << "go on" << endl;
boost::this_thread::sleep(boost::posix_time::seconds(1)); // 同理,也锁死
boost::thread t3(func2, 3); t1.join();
t2.join();
t3.join();
cout << "---end---" << endl;
return 0;
}

makefile:

.PHONY: DOIT

DOIT:
mips-linux-gnu-g++ -I. thread_pack.cpp -L./lib -lboost_thread -lboost_system -o boost_app

实测结论: 使用基于boost库的互斥锁、条件变量,和基于linux的原生API,效果一模一样。

.

BOOST 条件变量使用的更多相关文章

  1. Boost条件变量condition_variable_any

    Boost条件变量可以用来实现线程同步,它必须与互斥量配合使用.使用条件变量实现生产者消费者的简单例子如下,需要注意的是cond_put.wait(lock)是在等待条件满足.如果条件不满足,则释放锁 ...

  2. boost 条件变量

    // boost 条件变量 // 做个简单的笔记 #include <boost/thread/mutex.hpp> #include <boost/thread/condition ...

  3. boost库(条件变量)

    1相关理念 (1)类名 条件变量和互斥变量都是boost库中被封装的类. (2)条件变量 条件变量是thread库提供的一种等待线程同步的机制,可实现线程间的通信,它必须与互斥量配合使用,等待另一个线 ...

  4. 并发编程(二):分析Boost对 互斥量和条件变量的封装及实现生产者消费者问题

    请阅读上篇文章<并发编程实战: POSIX 使用互斥量和条件变量实现生产者/消费者问题>.当然不阅读亦不影响本篇文章的阅读. Boost的互斥量,条件变量做了很好的封装,因此比" ...

  5. 并发编程入门(二):分析Boost对 互斥量和条件变量的封装及实现生产者消费者问题

    请阅读上篇文章<并发编程实战: POSIX 使用互斥量和条件变量实现生产者/消费者问题>.当然不阅读亦不影响本篇文章的阅读. Boost的互斥量,条件变量做了很好的封装,因此比" ...

  6. boost 线程、互斥体、条件变量

    1.任何技术都是针对特定场景设计的,也就是说,为了解决某个问题而设计的. 2.考虑下面一种场景:一个小旅馆,只有一个卫生间,有清洁人员,店主人,和旅客.卫生间用完之后,就会自动锁闭,必须取钥匙,才能进 ...

  7. 并发编程(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题

    boost的mutex,condition_variable非常好用.但是在Linux上,boost实际上做的是对pthread_mutex_t和pthread_cond_t的一系列的封装.因此通过对 ...

  8. c++并发编程之条件变量(Condition Variable)

    条件变量(Condition Variable)的一般用法是:线程 A 等待某个条件并挂起,直到线程 B 设置了这个条件,并通知条件变量,然后线程 A 被唤醒.经典的「生产者-消费者」问题就可以用条件 ...

  9. Linux多线程同步之相互排斥量和条件变量

    1. 什么是相互排斥量 相互排斥量从本质上说是一把锁,在訪问共享资源前对相互排斥量进行加锁,在訪问完毕后释放相互排斥量上的锁. 对相互排斥量进行加锁以后,不论什么其它试图再次对相互排斥量加锁的线程将会 ...

随机推荐

  1. CTF-WeChall-第四天上午

    2020.09.12 08:24 哈哈,go on!

  2. Vue企业级优雅实战04-组件开发01-SVG图标组件

    (后续的文章 公众号会提前一周更新,欢迎关注文末的微信公众号:程序员搞艺术) 预览本文的实现效果: # gitee git clone git@gitee.com:cloudyly/dscloudy- ...

  3. 基于DDD+微服务的开发实战(1)

    1 DDD是什么? DDD是领域驱动设计,是Eric Evans于2003年提出的,离现在有17年. 2 为什么需要DDD 当软件越来越复杂,实际开发中,大量的业务逻辑堆积在一个巨型类中的例子屡见不鲜 ...

  4. 软件工程与UML作业3(互评作业)

    博客班级 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/ 作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018S ...

  5. php第四天-字符串

    0x01 字符串 1.1 字符串的处理方式 在不同的语言中,字符串的处理方式不同:在C中字符串是作为字节数组处理的:在Java中字符串是作为对象处理的:而在php中则把字符串作为基本数据类型来处理. ...

  6. 论文阅读 SNAPSHOT ENSEMBLES

    引入 1. 随机梯度下降的特点 随机梯度下降法(Stochastic Gradient Descent)作为深度学习中主流使用的最优化方法, 有以下的优点: 躲避和逃离假的鞍点和局部极小点的能力 这篇 ...

  7. IDEA 2020.2 最新激活教程,有效期到2089年!

    这段时间众多粉丝私信说需要IDEA 2020.2 最新激活教程,于是!他来了他带着最新激活教程来了. 注意: 本教程适用于 JetBrains 全系列产品 IDEA 2020.2 以下所有版本,请放心 ...

  8. python3 连接数据库~

    ~目前记录的是针对python3写的数据库连接,不适用于pyhon2.python3如果想要与数据库进行连接,则需要先下载对应各数据库的插件包,然后导入包.python3的插件下载地址:https:/ ...

  9. 温故知新----封装(struct)

    上次提到class是最常见的封装,今天发现别人开发的SDK里面有大量的结构体struct 转载: 1. https://blog.csdn.net/a_forever_dream/article/de ...

  10. hosts文件的内容

    C:\Windows\System32\drivers\etc\hosts 1 # Copyright (c) 1993-2009 Microsoft Corp. 2 # 3 # This is a ...