随笔分类 -  多线程与并发编程

摘要:背景实现再次简要介绍需注意点任务取消代码任务对象任务存储线程池测试测试代码运行结果toc 背景 19年时,写了一篇线程池的博客,那篇文章介绍得比较详细(是什么?为什么?怎么做?),但也比较啰嗦,看着比较费劲,其实我现在看着也烦,那时候左大括号还换行来着,后面被go语言教育了。。。。。。。。哈哈哈哈哈 阅读全文
posted @ 2021-08-17 23:10 無雙 阅读(254) 评论(0) 推荐(0)
摘要:背景实现代码toc 背景 本来打算与升级后的线程池写一起发的,发现篇幅过长,可读性受到影响,故拆开发 实现 升级后的同步队列支持在队列内构造元素 提高了性能,将原来的两次构造减少为一次构造(两次构造分别为,创建对象时构造一次,加入同步对队列时,拷贝/移动构造一次) 有更高的灵活性,添加时不再限制于传 阅读全文
posted @ 2021-08-15 22:16 無雙 阅读(131) 评论(0) 推荐(0)
摘要:管程管程的特点管程分类管程的实现条件变量条件变量的一种实现管程实现代码同步队列代码参考资料toc 管程 管程可以视为一个线程安全的数据结构,其内部提供了互斥与同步操作,向外提供访问共享数据的专用接口(接口被称为管程的过程),通过管程提供的接口即可达成共享数据的保护与线程间同步。 使用管程,可以简化线 阅读全文
posted @ 2021-07-27 06:37 無雙 阅读(1397) 评论(0) 推荐(1)
摘要:背景实现代码条件变量与锁条件变量定时等待的坑Linux + g++7.5WIndows + VS2017坑的处理toc 背景 信号量与条件变量差异对比 信号量存在一个计数,可以反映出当前阻塞在wait上的线程数(值小于0),或下次wait不会阻塞的线程数;条件变量没有相应计数 信号量仅能递增或递减计 阅读全文
posted @ 2021-07-06 22:45 無雙 阅读(1570) 评论(0) 推荐(0)
摘要:背景代码优化内存序扩展连接toc 背景 互斥锁(mutex): 加锁失败的线程会被阻塞,阻塞的线程不耗费CPU资源 导致模式切换,使用互斥锁加锁会进入内核态,阻塞时还会引发调度,运行时重新进入用户态 自旋锁(spin lock): 使用了忙等待,加锁失败的线程会一直重复尝试加锁,耗费CPU资源 使用 阅读全文
posted @ 2021-07-01 22:41 無雙 阅读(1283) 评论(0) 推荐(0)
摘要:原始的解决方案解决办法代码结构的定义创建Get、Set、Del计数获取全部键值对清空分片选取性能测试测试环境并行情况下getset非并行获取键值对单独测试清空不足参考toc 原始的解决方案 go自带的map不是goroutine安全的,为解决这个问题,最简单的方法是在map上挂把锁,每个gorout 阅读全文
posted @ 2021-02-28 11:52 無雙 阅读(437) 评论(0) 推荐(0)
摘要:现代的软件一般都使用了多线程技术,在有些软件里面,一个线程被创建出来执行了仅仅一个任务,然后就被销毁了。线程的创建与销毁是需要消耗资源,这样为了执行单一任务而被创建出来的线程越多,性能也就越差。如果能意识到线程仅仅是负责指令流的执行,并重复利用同一个线程去执行多个函数,将线程的创建和销毁的次数控制在 阅读全文
posted @ 2019-11-26 22:23 無雙 阅读(501) 评论(0) 推荐(0)