并发程序模板(std::thread)
来源:互联网 发布:图片分割打印软件 编辑:程序博客网 时间:2024/06/01 10:43
1.基本知识(单一消费者wait,多生产者为例)
typedef struct { int val;//已经生产的数量记录,>0时 wait不需要等待 std::mutex mutex; std::condition_variable cond;} ns_semaphore_t;
static inline int ns_sem_wait(ns_semaphore_t *s){ int rc = 0; std::unique_lock<std::mutex> lk(s->mutex);//unique_lock 默认构造函数的时候,对mutex上锁;在析构的时候解锁;保证cond.wait()执行的唯一性 while (s->val == 0)//=0时候循环等待的原因是,val可能被其他的线程取走,确保val值真实存在,val是主角,cond只是提醒s->cond.wait(lk);//problem ???, input unique_lock in case other thread call cond.wait() s->val--; return rc;}
static inline void ns_sem_post(ns_semaphore_t *s){ std::lock_guard<std::mutex> lk(s->mutex);//lock_guard 在构造中上,在析构中解锁,比unique简单 s->val++; s->cond.notify_all();}
unique_lock 或 lock_guard都是提供mutex的上锁解锁的管理工具
区别:unique_lock暂时可以理解为lock_guard的升级版,增加了许多成员函数
lock基础知识可以参考:http://www.cnblogs.com/haippy/p/3346477.html
0 0
- 并发程序模板(std::thread)
- C++11并发之std::thread
- C++11并发之std::thread
- C++11并发之std::thread
- C++11(std::thread)
- C++11 并发指南二(std::thread 详解)
- C++11 并发指南二(std::thread 详解)
- C++11 并发指南二(std::thread 详解)
- C++11 并发指南二(std::thread 详解)
- C++11 并发指南二(std::thread 详解)
- C++11 并发指南二(std::thread 详解)
- C++11 并发指南二(std::thread 详解)
- C++11 并发指南二(std::thread 详解)
- C++11 并发指南二(std::thread 详解)
- C++ 并发编程之std::thread的基本用法
- C++11 并发指南二(std::thread 详解)
- std :: thread
- std::thread
- OpenCV对图像的性能测试
- Android广播receiver
- C#基础-4:结构
- springmvc SSM后台框架源码
- Collection
- 并发程序模板(std::thread)
- 简单选择排序
- 响应式布局 BFC
- JAVA面向对象-----内部类的概述
- CodeForces 474C - Captain Marmot
- 理解Java垃圾回收
- gdb调试core时打印出当时变量的内容------有时可以主动制造core来看变量值
- Leetcode Word Search
- 欢迎使用CSDN-markdown编辑器