C++多线程程序设计

    xiaoxiao2021-03-26  19

    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,ResetEventSetEvent, windows临界区:用户对象,主要接口:init,enter,leave,delete。 程序崩溃时不会释放,windowsRALL:将锁包装在一个类里面,实现获取对象即获取锁,销毁对象自动释放锁读写锁:写时独占,不能有其他读和写,读时不能有写,读锁可升级为写锁,linuxWin32 互锁函数(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

    转载请注明原文地址: https://ju.6miu.com/read-660878.html

    最新回复(0)