有面试官说,环形缓冲区是用来减轻读写锁开销的?

brk1985 2015-04-10 01:44:31
是这样吗?

他问,读写锁开销大,怎么解决?最后看我无法回答说就是用环形缓冲区解决的。该怎么理解这句话?

我项目中为了运行速度,因此用到环形缓冲区,然后加锁控制读写的。怎么变成“用来减轻读写锁开销的”?
...全文
937 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
HANKER131523 2017-11-29
  • 打赏
  • 举报
回复
引用 12 楼 HANKER131523 的回复:
这个问题已经解决了,我重写了下程序,完全没问题了。前面的程序太乱了,也不好查,send和recv 2M的内容是没问题的,更大的还没试,其实大家真的可以多试试,感觉大家都不爱测试
抱歉,发错帖子了
HANKER131523 2017-11-29
  • 打赏
  • 举报
回复
这个问题已经解决了,我重写了下程序,完全没问题了。前面的程序太乱了,也不好查,send和recv 2M的内容是没问题的,更大的还没试,其实大家真的可以多试试,感觉大家都不爱测试
brk1985 2015-04-21
  • 打赏
  • 举报
回复
引用 4 楼 xihu1364 的回复:
[quote=引用 3 楼 brk1985 的回复:] [quote=引用 2 楼 xihu1364 的回复:] 不是减轻,是不使用加锁。 1个线程读,1个线程写。不加锁 n个线程读,还是得加锁
读的快,写的慢,就会读取“脏”数据吧?[/quote] 写的快,就不让写呗 ,只要写指针将要超过读指针,就等待下次[/quote] 恩,是这样的,确实等待下就行,,,1个线程读1个线程写,写的快不让写(等待)、读的快不让读(等待)。
「已注销」 2015-04-20
  • 打赏
  • 举报
回复
引用 6 楼 oyljerry 的回复:
http://blog.chinaunix.net/uid-7491192-id-2051200.html
代码明显错误,连volatile都没有,优化后都是在寄存器上读写,如何多线程同步?
躺着睡的蜗牛 2015-04-20
  • 打赏
  • 举报
回复
引用 5 楼 brk1985 的回复:
[quote=引用 1 楼 worldy 的回复:] 读的归读的,写的归写的,不落在同一个位置上,因此,不加锁吧
读的快,写的慢,会有问题吧? 很奇怪,面试官说,环形缓冲区用来减轻读写锁开销,听晕了。。。[/quote] ---------------------------------------------------------------------------------------------- 读得快,写得慢, 这个没事, 读到写位置的时候不再读数据就行了。 写得快,读得慢, 会出现数据被覆盖
Eleven 2015-04-10
  • 打赏
  • 举报
回复
oldmtn 2015-04-10
  • 打赏
  • 举报
回复
引用 4 楼 xihu1364 的回复:
[quote=引用 3 楼 brk1985 的回复:] [quote=引用 2 楼 xihu1364 的回复:] 不是减轻,是不使用加锁。 1个线程读,1个线程写。不加锁 n个线程读,还是得加锁
读的快,写的慢,就会读取“脏”数据吧?[/quote] 写的快,就不让写呗 ,只要写指针将要超过读指针,就等待下次[/quote] 说的很赞。 现实当中也就是这样用的 我的用法是: 预先分配N bytes的空间。 网络层收到数据包时, 从该空间分配一部分,然后将收到的数据包向上层报告。 不够用时就等待上层处理释放内存。。
oyljerry 2015-04-10
  • 打赏
  • 举报
回复
http://blog.chinaunix.net/uid-7491192-id-2051200.html
brk1985 2015-04-10
  • 打赏
  • 举报
回复
引用 1 楼 worldy 的回复:
读的归读的,写的归写的,不落在同一个位置上,因此,不加锁吧
读的快,写的慢,会有问题吧? 很奇怪,面试官说,环形缓冲区用来减轻读写锁开销,听晕了。。。
版主大哥 2015-04-10
  • 打赏
  • 举报
回复
引用 3 楼 brk1985 的回复:
[quote=引用 2 楼 xihu1364 的回复:] 不是减轻,是不使用加锁。 1个线程读,1个线程写。不加锁 n个线程读,还是得加锁
读的快,写的慢,就会读取“脏”数据吧?[/quote] 写的快,就不让写呗 ,只要写指针将要超过读指针,就等待下次
brk1985 2015-04-10
  • 打赏
  • 举报
回复
引用 2 楼 xihu1364 的回复:
不是减轻,是不使用加锁。 1个线程读,1个线程写。不加锁 n个线程读,还是得加锁
读的快,写的慢,就会读取“脏”数据吧?
版主大哥 2015-04-10
  • 打赏
  • 举报
回复
不是减轻,是不使用加锁。 1个线程读,1个线程写。不加锁 n个线程读,还是得加锁
worldy 2015-04-10
  • 打赏
  • 举报
回复
读的归读的,写的归写的,不落在同一个位置上,因此,不加锁吧
内容概要:本文围绕“可再生能源发电与电动汽车的协同调度策略”展开硕士论文级别的研究与复现工作,基于Matlab平台构建了高比例可再生能源接入背景下电力系统与电动汽车(EV)之间的多时间尺度协同优化模型。研究重点在于应对风光发电不确定性,充分利用电动汽车作为移动储能单元的灵活充放电能力(含V2G技术),实现电网削峰填谷、提升新能源消纳效率与系统运行经济性。文中综合考虑了异质电动车集群特性、V2G过程中的损耗约束以及随机因素影响,采用如深度确定性策略梯度(DDPG)强化学习、混合整数线性规划(MILP)等先进优化算法进行求解,并通过基准模型对比验证了所提自适应调度策略在提升电网稳定性、降低运行成本方面的有效性。; 适合人群:具备一定电力系统基础知识、优化理论背景及Matlab编程能力的研究生、科研人员,以及从事新能源并网、智能电网调度、车网互动(V2G)等方向的工程技术人员。; 使用场景及目标:①学习并复现已发表高水平硕士论文中的协同调度建模方法与仿真流程;②掌握将深度强化学习(如DDPG)应用于虚拟电厂、电动汽车集群调度等复杂非线性决策问题的技术路径;③为开展新能源消纳、需求侧响应、微电网优化运行等相关课题的研究提供可复用的代码框架与创新思路参考。; 阅读建议:建议读者结合文中提供的完整Matlab代码与技术文档,深入理解模型构建逻辑、算法实现细节与参数设置依据,优先在Simulink/Matlab环境中运行并调试仿真案例,通过调整场景参数与算法超参,探究不同策略对调度效果的影响,从而深化对协同调度机制与智能优化方法应用的理解。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧