免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: jlccwss
打印 上一主题 下一主题

生产者,消费者的问题 [复制链接]

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
11 [报告]
发表于 2010-08-12 17:32 |只看该作者
回复  mirnshi


    麻烦你了,能举个例子么?

我的目的很简单,只要存取不冲突就可以。
在头和尾 ...
jlccwss 发表于 2010-08-12 17:17



你的程序,自己运行过吗? 多运行几次,问题就出来了,队列大小分别大中小取值看看。

tail+1 != head

这个也有问题。head = 0的时候,条件恒等真

论坛徽章:
0
12 [报告]
发表于 2010-08-12 17:39 |只看该作者
上周做过一个测试:
生产者往数组写数据,消费者读取;
共享变量是readPtr,writePtr,volatile类型
生产者会修改writePtr,消费者只是读取writePtr;
另一个类似;

我设置的数组大小为2亿,机器是16CPU,内存16G;
跑了一夜,第二天过来看的时候,测试了3万多轮,均未出错。

还是想向高人求教,这样是否线程安全?(volatile变量被一个线程修改、一个线程读取)

论坛徽章:
0
13 [报告]
发表于 2010-08-12 17:53 |只看该作者
回复 10# zhangsuozhu


    问题是肯定有,只是我还没有发现而已,这种变态的用法还是算了。

论坛徽章:
0
14 [报告]
发表于 2010-08-12 17:54 |只看该作者
回复 11# mirnshi


    恩恩,谢了,问题肯定是有的,呵呵

论坛徽章:
0
15 [报告]
发表于 2010-08-12 17:55 |只看该作者
回复 12# okocha-jay


    不出错,不代表你的数据都是对的,细心的测试一下吧,不用搞那么大

论坛徽章:
0
16 [报告]
发表于 2010-08-12 18:02 |只看该作者
上周做过一个测试:
生产者往数组写数据,消费者读取;
共享变量是readPtr,writePtr,volatile类型
生产 ...
okocha-jay 发表于 2010-08-12 17:39



    这个问题比较复杂吧! 涉及到汇编里的基址变址操作是否是原子操作。而且不同机器的原子操作也不一样吧。所以我觉的,不是特别追求效率的都应加锁。

论坛徽章:
0
17 [报告]
发表于 2010-08-12 20:42 |只看该作者
回复 15# jlccwss


    嗯  只是证明暂时没有出错而已。
我是把数组内容设置为下标的值,比如a[9] = 9, a[7] = 7
两个线程结束后,主线程检测数组是否有 a = i的反例
然后整个数组清零,开始下一次测试。

论坛徽章:
0
18 [报告]
发表于 2010-08-12 20:43 |只看该作者
生产者和消费者也是,如果消费者发现数组中有a[i] !=i 的情形,就报错;
理论上说,我重复检查了两次。。。冗余了。主线程没必要再检查

论坛徽章:
0
19 [报告]
发表于 2010-08-13 16:13 |只看该作者
哇塞。。。16cpu
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP