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。 程序崩溃时不会释放,windowsRALL:将锁包装在一个类里面,实现获取对象即获取锁,销毁对象自动释放锁读写锁:写时独占,不能有其他读和写,读时不能有写,读锁可升级为写锁,linuxWin32 互锁函数(InterlockedIncrement、 InterlockedDecrement、InterlockedExchange、InterlockedExchangeAdd、 InterlockedCompareExchange)条件变量:init,single, broadcast,wait,destroy,与互斥锁关联,等待时自动释放互斥锁,唤醒时自动拥有互斥锁,linux3. 生产者消费者模型
生产者为多个线程,消费者为多个线程,共用一块数据生产者等待至少一个空间存放产品,消费者等待至少有一个产品消费定义空间信号量,初始值为空间个数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
