社区
C#
帖子详情
C#中queue的问题
shanyang1
2011-05-01 08:31:07
我有2个线程,一收一发
收线程速度很快,收到后直接入队列X,发线程先判断X.count是否大于0,然后从X队列dequeue头部一个元素发出去
现在运行的时候,经常发现X队列dequeue出来的东西是null(已经保证enqueue不是null,而且队列长度大于0才会dequeue)
还有的时候发现enqueue的时候提示数组长度不够
查了一下好像是因为线程间协调出问题了,要用到什么lock free queue的技术才能解决,没太弄明白什么意思
...全文
566
11
打赏
收藏
C#中queue的问题
我有2个线程,一收一发 收线程速度很快,收到后直接入队列X,发线程先判断X.count是否大于0,然后从X队列dequeue头部一个元素发出去 现在运行的时候,经常发现X队列dequeue出来的东西是null(已经保证enqueue不是null,而且队列长度大于0才会dequeue) 还有的时候发现enqueue的时候提示数组长度不够 查了一下好像是因为线程间协调出问题了,要用到什么lock free queue的技术才能解决,没太弄明白什么意思
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dongxinjian_1989
2012-09-19
打赏
举报
回复
不是很东 学习中
shanyang1
2011-05-01
打赏
举报
回复
[Quote=引用 9 楼 lcl_data 的回复:]
if(queueX.count>0)
{
线程1进到这里,上句queueX.count判断成功,此时线程1被CPU打断,执行线程2(也是取数据的),然后在执行线程1
X = queueX.dequeue();
}
[/Quote]
线程2(也是取数据的)是consumer线程么?
我这里只有2个线程(1个producer,1个consumer)其中consumer是用while(true)的方式一直循环的
对于consumer而言,取数据应该肯定在判断if(queue.count>0)之后的
十八道胡同
2011-05-01
打赏
举报
回复
if(queueX.count>0)
{
线程1进到这里,上句queueX.count判断成功,此时线程1被CPU打断,执行线程2(也是取数据的),然后在执行线程1
X = queueX.dequeue();
}
shanyang1
2011-05-01
打赏
举报
回复
为何明明queue.count>0的情况下dequeue出来还有null的东西?
CShareMySide
2011-05-01
打赏
举报
回复
[Quote=引用 2 楼 inso2010 的回复:]
Monitor.Enter(X);
操作
Monitor.Exit(X);
[/Quote]
+1
isjoe
2011-05-01
打赏
举报
回复
1、使用AutoResetEvent 或其他线程同步类,在接收线程接收到数据且放入队列之前,让发送线程处于
等待状态,等接收线程处理完成后给发送线程发信号,让他处理刚刚收到的数据。
or
2、用lock锁定队列对象
十八道胡同
2011-05-01
打赏
举报
回复
看来没仔细学习操作系统,建议你先看下典型的生产者-消费者算法。
shanyang1
2011-05-01
打赏
举报
回复
有必要lock么
thread producer
{
queueX.enqueue(item);
}
thread consumer
{
if(queueX.count>0)
{
X = queueX.dequeue();
}
}
就算是不同线程来操作也应该不会有冲突的地方啊?
十八道胡同
2011-05-01
打赏
举报
回复
[Quote=引用 1 楼 caozhy 的回复:]
典型的生产者-消费者算法。
[/Quote]
支持
需要lock住公用的部分,lock的意思就是说只能有一个线程加或者取,这样就可以保证操作都有效
inso2010
2011-05-01
打赏
举报
回复
Monitor.Enter(X);
操作
Monitor.Exit(X);
threenewbee
2011-05-01
打赏
举报
回复
典型的生产者-消费者算法。
C#
队列
Queue
多线程用法实例
主要介绍了
C#
队列
Queue
多线程用法,实例分析了队列的相关使用技巧,需要的朋友可以参考下
C#
Message
Queue
示例
本例子主要是发送不同的消息。然后根所ID得到指定的消息内容。
c#
Queue
.rar
c#
中
的
queue
用法的一些代码,对初学者比较有用。希望大家能有所收获。谢谢。
C#
中
queue
固定队列长度设置和使用
C#
中
queue
固定队列长度设置和使用,包含图形界面和一个一个新的类的设计
c#
queue
队列例子
该事例用于演示
C#
中
队列的处理,当声明一个队列后,开启一个线程监控此队列,当有消息时就立刻传送出去。
C#
110,538
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章