求一个资源管理模块的多线程模式

dengyejing dengyejing 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
小弟最近正在做一个资源管理模块,基本功能如下:
1、所有资源需要用一个容器记住,因为经常要做遍历操作,我现在是用一个双向链表,资源创建时被添到链表中
2、因为系统硬件限制,不可能所有资源都能加载到内存,需要做动态加载和卸载,我现在是用LRU来管理,当前用到的资源节点会移到链表头,如果当前节点还处于卸载状态,就加载它,然后计算当前已加载资源总体积,如果超过指定值就开始从链表尾回收,一个一个卸载,直接到总体积小于指定值

现在,想把这个模块做成多线程的,主要目的是希望能预先异步加载资源,因为上面第2步中提到的“如果当前节点还处于卸载状态,就加载它”可能很慢,导致停顿。

但是,想了半天,却觉得这里面有个深刻的冲突:即原来的做法是“惰性加载”,与多线程带来的“异步加载”(也就是预加载——提前加载),本质上是矛盾的?
从实现上说,双向链表的所有操作应该加锁,资源的创建、移动操作就安全了,但是,资源的加载和回收这两个操作,我感到很麻烦,如果把它放在锁里,那么只要一个线程在加载,另一个线程就不可能使用资源了(这是使用大粒度锁的时候,但如果对每个资源一把锁,也有问题,因为在加载时不是仅仅只对自己有改动,如果触发了回收,那就会去修改其它资源),如果不放在锁里,那么很可能一个线程在回收时,恰好把另一个线程刚加载到一半的资源又卸载了,另外,要保持当前资源总体积计数的准确性,也有困难

请各位并发高手帮忙想想,怎样的多线程模式适合于这个需求?
...全文

相关推荐

面向模式的软件体系结构+卷3-资源管理模式

其他卷 1到5中文版 也在我的资源列表中有下载

elancom

探索设计模式的魅力:“感受单例模式的力量与神秘” - 掌握编程的王牌技巧

在软件开发的赛场上,单例模式以其独特的魅力长期占据着重要的地位。作为设计模式中的一员,它在整个软件工程的棋盘上扮演着关键性角色。本文将带你深入探索单例模式的神秘面纱,从历史渊源到现代应用,从基础实现到高级技巧,经过戏剧性的转折和层层推进,我们将一步步揭开这一模式背后的秘密。文章串起时间的线索,带你重回单例模式的起源,理解它在软件工程历史中的地位。经过时间的流逝,单例模式不仅保持了其原有的魅力,而且随着新的编程语言和技术的发展,还展示出了新的活力和应用场景。

danci_btq

C++ 异常安全(四):RAII — 核心资源管理方案

(Resource Acquisition Is Initialization,资源获取即初始化)是 C++ 核心资源管理方案,也是保障异常安全编程的核心模式。RAII 的核心思想是将资源的生命周期与拥有该资源的对象的生命周期绑定,通过利用对象的构造函数和析构函数来自动管理资源,确保资源在使用完毕后能够正确释放,从而避免内存泄漏和其他资源管理错误。

代小萌

Java设计模式之单例模式

Java设计模式之单例模式

云在青天cc

多线程单例模式并发访问

深入浅出:讲解单例模式,多线程安全和并发访问问题.让你轻松应对面试

jacket_star
评论 3
收藏 已收藏
分享
返回顶部