.net 多线程并发问题

xm265 2016-03-28 04:53:48
要实现的功能:
在列表中选择某行数据 发布到显示屏进行显示,并且是隔一秒执行一次
现在有多行数据,进行并发执行,如何实现?

button_click()
{
var value = SelectedValue;
Thread thread = new Thread(new ParameterizedThreadStart(Callback));
object o = value;
thread.Start(o);
}

void Callback(object value)
{
ObservableCollection<InfoItem> infoItems = Server.Service.SearchInfoItem(value.LEDId);
while(value.isUse)
{
公有的调用 函数
coilcount = getCoilcount();
show(value,infoItems,coilcount);
}
}

单独选择某行数据进行执行可以,如果多个同时并发执行就出现数据混乱。
麻烦高手相助!



...全文
531 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xm265 2016-04-19
  • 打赏
  • 举报
回复
coilCount 获取是值都是一样的,这个没关系。 因为多了个while 循环某个数据进行轮播 如果等一个执行完,在执行另外一个,就达不到效果。 show 是公有资源,包含 连接设备 上传数据并显示
xm265 2016-04-18
  • 打赏
  • 举报
回复
如果加lock 就变成单线程模式了 实现的方法: 选择某行,执行发布,都是同步执行,互相不影响到数据(调用到同一函数) 麻烦帮忙解答一下,谢谢!
枫0子K 2016-04-18
  • 打赏
  • 举报
回复
只lock住show这个方法(加上上面的coilCount?)不可以吗?感觉这段代码才是导致楼主说的数据混乱的关键。 就是等我show完之后你才能进来show,不然两个同时在show是什么回事嘛。 涉及到全局资源的话肯定只能是锁了,这个资源一次只能被一个线程使用才是。
Justin-Liu 2016-03-29
  • 打赏
  • 举报
回复
共享资源没有上锁
yuyue5945 2016-03-28
  • 打赏
  • 举报
回复
你去查一下互锁,临界区这两个概念,就知道为什么有上诉原因了,一楼说的就是解决方法!
杨友山 2016-03-28
  • 打赏
  • 举报
回复
比较常用的就是加lock了
wanghui0380 2016-03-28
  • 打赏
  • 举报
回复
原因是因为你每次启动了一个新的线程,他们产生了竞态 有好多种方法可以解决自己挑一个把 1.使用lock锁,一个没完成前,其他线程只能等待 2.使用线程安全队列,队列本身是先进先出,所以你后面怎么玩都是一个顺序 3.使用 thread.join 让他们同步

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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