c++11 多线程传参和生产者消费者实现
普通函数传参和成员函数传参
#include <iostream>
#include <thread>
#include <windows.h>
void func(int x) {for (int i = 1; i <= 10; i++) {printf("%d\n", x);Sleep(100);}
}class A{public:void func(int x) {for (int i = 1; i <= 10; i++) {printf("%d\n", 2);Sleep(100);}}
};
int main() {A a;std::thread(&A::func, &a, 2).detach(); // 成员函数多线程这样写std::thread(func, 1).detach();getchar(); // 如果主进程结束那么子线程也会死return 0;
}
生产者消费者
#include <iostream>
#include <thread>
#include <mutex>
#include <vector>
#include <windows.h>std::vector<int> data; // 临界区
std::mutex mux; // 全局互斥锁/**
“生产者-消费者”问题的实现,我的理解是:通过竞争互斥锁来间接实现对临界区的互斥访问。
同一时间段内,只有一个线程得到了 mux 互斥锁,那么接下来对临界区的操作自然也是互斥的,直到释放这个互斥锁。
**/
void product_thread(){while(true){std::unique_lock<std::mutex> lock(mux);if (data.size() >= 5) {lock.unlock();continue;}data.push_back(1);printf("----生产\n");lock.unlock();Sleep(200);}
}void consume_thread(){while (true){std::unique_lock<std::mutex> lock(mux);if(data.empty()) {lock.unlock();continue;}printf("消耗\n");data.pop_back();lock.unlock();Sleep(1000);}
}int main() {std::thread thread_product(&product_thread);std::thread thread (&consume_thread);thread_product.join();thread.join();return 0;
}
c++11 多线程传参和生产者消费者实现相关推荐
- [19/04/11-星期四] 多线程_并发协作(生产者/消费者模式_2种解决方案(管程法和信号灯法))...
一.概念 多线程环境下,我们经常需要多个线程的并发和协作.这个时候,就需要了解一个重要的多线程并发协作模型"生产者/消费者模式". Ø 什么是生产者? 生产者指的是负责生产数据的模 ...
- python爬虫02-提升爬取效率、多线程,多线程传参,多进程,线程及线程池概念,协程,多任务异步协程,异步请求aiohttp模块,视频站工作原理
1.提升爬取效率 使用多线程,多进程,携程,异步 2.多线程 进程是资源单位,每个进程,都会有一个默认的主线程 线程是执行单位 执行多线程需要导包: from threading import Thr ...
- 【Linux入门】多线程(线程概念、生产者消费者模型、消息队列、线程池)万字解说
目录 1️⃣线程概念 什么是线程 线程的优点 线程的缺点 线程异常 线程异常 Linux进程VS线程 2️⃣线程控制 创建线程 获取线程的id 线程终止 等待线程 线程分离 3️⃣线程互斥 进程线程间 ...
- Linux 多线程编程(实现生产者消费者模型)
Linux 多线程编程 线程分类 线程按照其调度者可以分为用户级线程和内核级线程两种. 内核级线程 在一个系统上实现线程模型的方式有好几种,因内核和用户空间提供的支持而有一定程度的级别差异.最简单的模 ...
- java多线程生产者与消费者问题_Java多线程详解之四:生产者消费者问题
一.问题描述 生产者消费者问题(Producer-Consumer problem),也称有限缓冲区问题(Bounded-buffer promblem),是一个多线程同步问题的经典案例.对于一个固定 ...
- Java多线程(3)—生产者/消费者
这个是一个典型的线程问题.生成者(Productor)生产商品并交给店员(Clerk),消费者(Customer)从店员处购买商品,店员一次性只能购买固定数量的产品,如果生产者试图生成更多的商品,店员 ...
- 多线程终极模式:生产者-消费者模式
多线程de小事情 导航不迷路: 程序.进程以及线程的爱恨情仇 最简单实现多线程的方法(Thread) 简单易懂的多线程(通过实现Runnable接口实现多线程) 常用获取线程基本信息的方法(新手专属) ...
- 秒杀多线程第十篇 生产者消费者问题
继经典线程同步问题之后,我们来看看生产者消费者问题及读者写者问题.生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消 ...
- Linux 系统应用编程——多线程经典问题(生产者-消费者)
"生产者--消费者"问题是Linux多线程编程中的经典问题,主要是利用信号量处理线程间的同步和互斥问题. "生产者--消费者"问题描述如下: 有一个有限缓冲区( ...
最新文章
- python io流a+_Python基础——文件操作及IO流
- Hadoop生态Zookeeper安装
- AI助手智商测评Siri进步最大,无人驾驶打车服务已在美国试行
- httpserver
- bug经验-文件路径问题
- Oracle中动态SQL详解
- P1375 嵌套矩形
- HttpWatch工具简介及使用技巧(二)
- Delphi ArcEngine 创建比例尺
- 【论文解读】EMNLP2019 如何在Transformer中融入句法树信息?这里给出了一种解决方案...
- BZOJ5074 小B的数字
- python一行输出_#python版一行内容分行输出
- # 融云 SDK 新用户入群加载历史消息 记录融云 SDK 的一个小功能,分享一下 ## 背景 项目中有用到融云 SDK 中的群组功能,产品说需要新人入群的时候看到历史消息。 本来以为直接能获
- java 切割冒号_java split 冒号(java中split是什么意思啊)
- java坦克类的设计_纯JAVA坦克大战,可以做毕业设计
- 关于使用Kmeans函数RuntimeWarning: Explicit initial center position passed: performing only one init in KMe
- 赛轮转债上市价格预测
- 计算机音乐怎么去掉,怎么取消电脑的开机音乐
- Linux LCD设备驱动详解
- 探秘区块链之全局介绍
热门文章
- 成功解决AttributeError: ‘dict_values‘ object has no attribute ‘index‘
- TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录
- CUMCM:05A长江水质综合评价与预测
- Py之imgaug:Python库之imgaug简介、安装、使用方法之详细攻略
- DL之HNN:基于HNN(subplot)将凌乱数字矩阵图像(模拟手写数字图片)实现转为最相近的阿拉伯数字
- AI:一个20年程序猿的学习资料大全—前端/后端/架构师/运维各种很多教程资料——只有你不想要的,没有你找不到的
- 成功解决PermissionError(权限拒绝解决答案集锦): [Errno 13] Permission denied: ‘f:\\program files\\python\\python36\
- Lesson 02:变量、数据类型
- WebService 与 DCOM / Corba 是什么关系?
- esp8266make相关文件改进