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

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

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

我项目中为了运行速度,因此用到环形缓冲区,然后加锁控制读写的。怎么变成“用来减轻读写锁开销的”?
...全文
862 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
  • 打赏
  • 举报
回复
读的归读的,写的归写的,不落在同一个位置上,因此,不加锁吧

18,356

社区成员

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

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