您的位置:首页 > 编程语言 > C语言/C++

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: