std::condition_variable(3)复习
2024-09-28 08:43:49
#include <iostream> // std::cout
#include <thread> // std::thread
#include <mutex> // std::mutex, std::unique_lock
#include <condition_variable> // std::condition_variable std::mutex mtx;
std::condition_variable cv; int cargo = ; // shared value by producers and consumers void consumer()
{
std::unique_lock < std::mutex > lck(mtx);
while (cargo == )
cv.wait(lck);
std::cout << cargo << '\n';
cargo = ;
} void producer(int id)
{
std::unique_lock < std::mutex > lck(mtx);
cargo = id;
cv.notify_one();//如果存在多个等待唤醒的线程则唤醒的线程时不确定的
} int main()
{
std::thread consumers[], producers[];
//多个生产者,多个消费者,只要加锁还是安全的
// spawn 10 consumers and 10 producers:
for (int i = ; i < ; ++i) {
consumers[i] = std::thread(consumer);//消费者线程
producers[i] = std::thread(producer, i + );//生产者线程
} // join them back:
for (int i = ; i < ; ++i) {
producers[i].join();
consumers[i].join();
}
getchar();
return ;
}
通常std::condition_variable使用std::unique_lock锁住线程,如果使用其的可以用std::condition_variable_any
最新文章
- XmlSerializer 对象的Xml序列化和反序列化
- (视频) 《快速创建网站》2.1 在Azure上创建网站及网站运行机制
- JQuery 表单校验插件 validate 使用纪录
- c# ConfigurationSection
- nenu contest
- 怎么在centos中查看某个目录的树结构?
- Mysql安装时出现APPLY security settings错误
- Oracle 数据迁移(从Oracle11G迁移到更高的版本号Oracle10G低版本号)
- 通用Adapter设计,SparseArray+泛型+回调的使用
- Hadoop 发行版本 Hortonworks 安装详解(一) 准备工作
- JAVA_SE基础——58.如何用jar命令对java工程进行打包
- 测试AtomicInteger与普通int值在多线程下的递增操作
- NFS部署文件共享
- mysql官方测试库
- jsp页面上的下拉框案例(Struts2)
- MongoDB学习记录(四) - MongoDB的";增查改删";操作之";改";
- mysql查询反斜杠字符串问题
- Java代码中获取Json的key值
- linux 3.10 的中断收包笔记
- RAPID程序设计