*:使用 lock_guard 后,就不可以使用 lock() 和 unlock()
*:lock_guard 和智能指针一样,会自动解锁
 
#include <iostream>
#include <thread>
#include <mutex>
#include <list>
using namespace std; class A
{
public:
void inNum()
{
for (int i = 0; i < 10000; i++)
{
m_mutex.lock(); num_list.push_back(i);
cout << "正在写:" << i << endl; m_mutex.unlock();
}
} void outNum()
{
for (int i = 0; i < 10000; i++)
{
if (!num_list.empty())
{
lock_guard<mutex> myguard(m_mutex); int temp_num = num_list.front();
num_list.pop_front();
cout << "正在读数据,当前数据:" << temp_num << endl;
}
else
{
cout << "正在读数据,当前数据:为空" << endl;
}
}
} void parintListCount()
{
cout << "列表中剩余数量:" << num_list.size() << endl;
} private:
list<int> num_list;
mutex m_mutex; // 创建一个互斥量
}; int main()
{
A a;
thread tIn(&A::inNum, &a);
thread tOut(&A::outNum, &a); tIn.join();
tOut.join(); a.parintListCount(); return 0;
}
 
 
 
 
 
 

std::thread 二:互斥量(lock_guard())的更多相关文章

  1. C++并发与多线程学习笔记--互斥量、用法、死锁概念

    互斥量(mutex)的基本概念 互斥量的用法 lock(), unlock() std::lock_guard类模板 死锁 死锁演示 死锁的一般解决方案 std::lock()函数模板 std::lo ...

  2. OS: 读者写者问题(写者优先+LINUX+多线程+互斥量+代码)(转)

    一. 引子 最近想自己写个简单的 WEB SERVER ,为了先练练手,熟悉下在LINUX系统使用基本的进程.线程.互斥等,就拿以前学过的 OS 问题开开刀啦.记得当年学读者写者问题,尤其是写者优先的 ...

  3. 第29课 互斥量与自解锁(std::mutex和lock系列)

    一. 互斥量 (一)Mutex系列类 1. std::mutex:独占的互斥量,不能递归使用. 2. std::recursive_mutex:递归互斥量.允许同一线程多次获得该互斥锁,可以用来解决同 ...

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

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

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

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

  6. Cocos2d-X多线程(2) 线程的互斥量std::mutex和线程锁

    多个线程同时访问共享资源时,经常会出现冲突等.为了避免这种情况的发生,可以使用互斥量,当一个线程锁住了互斥量后,其他线程必须等待这个互斥量解锁后才能访问它. thread提供了四种不同的互斥量: 1. ...

  7. posix thread互斥量

    互斥量 互斥量(Mutex)是“mutual exclusion”的缩写.互斥量是实现线程同步,和保护同时写共享数据的主要方法.使用互斥量的典型顺序如下:1. 创建和初始一个互斥量 2. 多个线程尝试 ...

  8. Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)

    昨天练车时有一MM与我交替着练,聊了几句话就多了起来,我对她说:"看到前面那俩教练没?老色鬼两枚!整天调戏女学员."她说:"还好啦,这毕竟是他们的乐趣所在,你不认为教练每 ...

  9. Cocos2dx 3.0 过渡篇(二十七)C++11多线程std::thread的简单使用(下)

    本篇接上篇继续讲:上篇传送门:http://blog.csdn.net/star530/article/details/24186783 简单的东西我都说的几乎相同了,想挖点深的差点把自己给填进去. ...

  10. C++11 并发指南二(std::thread 详解)

    上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...

随机推荐

  1. 【Azure App Service】如何来停止 App Service 的高级工具站点 Kudu ?

    问题描述 如何来停止 App Service 的高级工具站点 Kudu ? kudu 介绍 Kudu 提供了一组面向开发人员的工具和扩展点,用于您的应用服务应用程序. Kudu (Advanced T ...

  2. 【Azure 应用服务】App Service下部署的应用报错 Out of Memory

    问题描述 应用部署到App Service后,遇见了Out of Memory的错误. 报错信息:GetData  Error:, Exception of type 'System.OutOfMem ...

  3. Java 开发人员调度软件项目 (java基础编程总结项目)+javaBean+测试代码+数组知识+数据结构+继承+多态+封装+自定义异常,异常处理+构造器知识+重载+重写+接口+实现接口+关键字使用(static +equalsIgnoreCase+fianl+instanceof判断类型)+向下转型与向上转型

    /** * * @Description Java 开发人员调度软件项目 (java基础编程总结项目) * +javaBean+测试代码+数组知识+数据结构+继承+多态+封装+自定义异常,异常处理 * ...

  4. Jpackage-制作无需预装Java环境的Jar可执行程序

    JAR 包要在预装 JRE 环境的系统上执行.如果没有预先安装 JRE 环境,又想直接运行 Java 程序,该怎么办呢? 这篇文章我们会先学习如何将 Java 程序打包成一个可执行的 Java JAR ...

  5. 别名路径跳转 - vscode 插件

    别名路径跳转 - vscode 插件

  6. 向TreeView添加自定义信息

    可在 Windows 窗体 TreeView 控件中创建派生节点,或在 ListView 控件中创建派生项. 通过派生可添加任何所需字段,以及添加处理这些字段的自定义方法和构造函数. 此功能的用途之一 ...

  7. gulp-imagemin版本9图片压缩

    由于网上大多数的博文已经比较久,参考性不大 版本 gulp PS D:\XXX\github\hexo> gulp -v CLI version: 2.3.0 Local version: 4. ...

  8. 算法研究之合并两个已排序的数组java版

    package com.zken.test; /** * @author iamzken * 2015-8-28 * 合并两个有序数组 * */ public class Sorter2 { publ ...

  9. dbvisualizer之编辑区中文乱码问题

    !在SQL Commander中,sql语句中如果有中文,显示是'口口口'. 解决办法如下: 在Tools->tool Properties->General->Appearance ...

  10. 通过抓包分析RTP包头格式信息

    目录 RTP概览 RTP Header格式 Rtp 数据包拆解 Version Padding X(扩展) CC(CSRC计数) M(marker) PT(payload type) sequence ...