C++多线程程序设计
2017-02-05 15:57
134 查看
C++多线程程序设计经验:http://gotowqj.iteye.com/blog/1934643
C++实现线程同步的几种方式: http://www.cnblogs.com/jzincnblogs/p/5188051.html
选择合适的同步基元以最大限度地减少开销:https://software.intel.com/zh-cn/articles/choosing-appropriate-synchronization-primitives-to-minimize-overhead
如有可能可使用非阻塞锁: https://software.intel.com/zh-cn/articles/use-non-blocking-locks-when-possible
Pthread:http://baike.baidu.com/link?url=hdwpdW6LNMtNZzNv6_1AN2mQ4oVUsztLJw1aPB4qtdxnneNbaHS_ZkIOeTa5TUz9Go3cEZ2Juiz0QH92_DwLYq
pthread读写锁: http://www.cnblogs.com/qq78292959/archive/2013/01/17/2864446.html
PTHREAD编程--条件变量: http://www.cnblogs.com/motadou/archive/2010/02/13/1668075.html
c++多线程实现生产者消费者: http://blog.csdn.net/tingyuanss/article/details/8832214
C++多线程框架(三)--------- 消息队列: http://blog.csdn.net/ygrx/article/details/8964804
完成端口(Completion Port)详解:http://blog.csdn.net/piggyxp/article/details/6922277
《Windows核心编程系列》十异步IO之IO完成端口: http://blog.csdn.net/ithzhang/article/details/8508161
IO完成端口与线程池:http://blog.csdn.net/jiht594/article/details/7637749
笔记:
1. 线程创建:create thread
2. 线程间通信:
windows锁:Mutex,事件,信号量,临界区(用户空间),互锁函数(用户空间)
linux锁:mutex,条件变量,信号量,读写锁
mutex: linux 用pthread,是用户空间,windows 在内核空间,接口:lock,trylock,unlock
非阻塞锁:try lock, 避免进程上下文切换。
信号量:内核对象:可以有N个值,windows和linux都有
事件:内核对象,WaitForSingleObject,ResetEvent,SetEvent,
windows
临界区:用户对象,主要接口:init,enter,leave,delete。 程序崩溃时不会释放,windows
RALL:将锁包装在一个类里面,实现获取对象即获取锁,销毁对象自动释放锁
读写锁:写时独占,不能有其他读和写,读时不能有写,读锁可升级为写锁,linux
Win32 互锁函数(InterlockedIncrement、 InterlockedDecrement、InterlockedExchange、InterlockedExchangeAdd、 InterlockedCompareExchange)
条件变量:init,single, broadcast,wait,destroy,与互斥锁关联,等待时自动释放互斥锁,唤醒时自动拥有互斥锁,linux
3. 生产者消费者模型
生产者为多个线程,消费者为多个线程,共用一块数据
生产者等待至少一个空间存放产品,消费者等待至少有一个产品消费
定义空间信号量,初始值为空间个数N,生产者等待空间信号量,消费者消费完一个产品增加这个信号量
定义产品信号量,初始值为0,消费者等待这个信号量,生产者生产完一个产品增加这个信号量
定义一个存储空间锁,生产者和消费者只能同时一个操作存储空间的数据,生产者和消费者等待到信号量后就等待这个锁。
4. 完成端口
完成端口是异步IO+线程池框架
一般步骤:init 完成端口,创建worker线程,绑定socket,文件描述符到完成端口并注册事件,worker线程里面调用getqueuedcompletionstatus来等待完成事件,根据key处理对应的事件,向每个worker发送虚拟的完成事件,worker线程接受到虚拟完成事件而退出,关闭完成端口。
5. C++11多线程
std::mutex
std::guard_lock
std::condition_variable
std::thread
C++实现线程同步的几种方式: http://www.cnblogs.com/jzincnblogs/p/5188051.html
选择合适的同步基元以最大限度地减少开销:https://software.intel.com/zh-cn/articles/choosing-appropriate-synchronization-primitives-to-minimize-overhead
如有可能可使用非阻塞锁: https://software.intel.com/zh-cn/articles/use-non-blocking-locks-when-possible
Pthread:http://baike.baidu.com/link?url=hdwpdW6LNMtNZzNv6_1AN2mQ4oVUsztLJw1aPB4qtdxnneNbaHS_ZkIOeTa5TUz9Go3cEZ2Juiz0QH92_DwLYq
pthread读写锁: http://www.cnblogs.com/qq78292959/archive/2013/01/17/2864446.html
PTHREAD编程--条件变量: http://www.cnblogs.com/motadou/archive/2010/02/13/1668075.html
c++多线程实现生产者消费者: http://blog.csdn.net/tingyuanss/article/details/8832214
C++多线程框架(三)--------- 消息队列: http://blog.csdn.net/ygrx/article/details/8964804
完成端口(Completion Port)详解:http://blog.csdn.net/piggyxp/article/details/6922277
《Windows核心编程系列》十异步IO之IO完成端口: http://blog.csdn.net/ithzhang/article/details/8508161
IO完成端口与线程池:http://blog.csdn.net/jiht594/article/details/7637749
笔记:
1. 线程创建:create thread
2. 线程间通信:
windows锁:Mutex,事件,信号量,临界区(用户空间),互锁函数(用户空间)
linux锁:mutex,条件变量,信号量,读写锁
mutex: linux 用pthread,是用户空间,windows 在内核空间,接口:lock,trylock,unlock
非阻塞锁:try lock, 避免进程上下文切换。
信号量:内核对象:可以有N个值,windows和linux都有
事件:内核对象,WaitForSingleObject,ResetEvent,SetEvent,
windows
临界区:用户对象,主要接口:init,enter,leave,delete。 程序崩溃时不会释放,windows
RALL:将锁包装在一个类里面,实现获取对象即获取锁,销毁对象自动释放锁
读写锁:写时独占,不能有其他读和写,读时不能有写,读锁可升级为写锁,linux
Win32 互锁函数(InterlockedIncrement、 InterlockedDecrement、InterlockedExchange、InterlockedExchangeAdd、 InterlockedCompareExchange)
条件变量:init,single, broadcast,wait,destroy,与互斥锁关联,等待时自动释放互斥锁,唤醒时自动拥有互斥锁,linux
3. 生产者消费者模型
生产者为多个线程,消费者为多个线程,共用一块数据
生产者等待至少一个空间存放产品,消费者等待至少有一个产品消费
定义空间信号量,初始值为空间个数N,生产者等待空间信号量,消费者消费完一个产品增加这个信号量
定义产品信号量,初始值为0,消费者等待这个信号量,生产者生产完一个产品增加这个信号量
定义一个存储空间锁,生产者和消费者只能同时一个操作存储空间的数据,生产者和消费者等待到信号量后就等待这个锁。
4. 完成端口
完成端口是异步IO+线程池框架
一般步骤:init 完成端口,创建worker线程,绑定socket,文件描述符到完成端口并注册事件,worker线程里面调用getqueuedcompletionstatus来等待完成事件,根据key处理对应的事件,向每个worker发送虚拟的完成事件,worker线程接受到虚拟完成事件而退出,关闭完成端口。
5. C++11多线程
std::mutex
std::guard_lock
std::condition_variable
std::thread
相关文章推荐
- 『C程序设计』读书笔记系列文章之第七章 函数
- Java语言程序设计-Eclipse入门之HelloWorld程序
- 13. javacript高级程序设计-事件
- JS面向对象的程序设计
- 团体程序设计天梯赛-练习集 L3-015. 球队“食物链”(DFS)
- 输入法编辑器(IME)程序设计(4)
- C程序设计课程主页 :12-13-2
- NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(约翰·亨利-dp)
- 第十二届北航程序设计竞赛决赛网络同步赛: 浪哥的烦恼
- 程序设计:蒜头君下棋
- 由C语言字符串解析方式带来的隐晦的程序设计问题
- java程序设计--孙鑫java无难事Lesson7《多线程》
- javaScript高级程序设计阅读总结
- 杭州电子科技大学程序设计竞赛(2016’12)- 网络同步赛 1007
- Java程序设计19_6课后题
- WinForm程序设计-在表单中使用FLASH控件
- 第二次C程序设计上机报告
- NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))
- C程序设计 例题5.9 判断一个大于3的数是否为素数改进
- 团体程序设计天梯赛 L1-003. 个位数统计