问题描述
要实现的功能:在列表中选择某行数据发布到显示屏进行显示,并且是隔一秒执行一次现在有多行数据,进行并发执行,如何实现?button_click(){varvalue=SelectedValue;Threadthread=newThread(newParameterizedThreadStart(Callback));objecto=value;thread.Start(o);}voidCallback(objectvalue){ObservableCollection<InfoItem>infoItems=Server.Service.SearchInfoItem(value.LEDId);while(value.isUse){公有的调用函数coilcount=getCoilcount();show(value,infoItems,coilcount);}}单独选择某行数据进行执行可以,如果多个同时并发执行就出现数据混乱。麻烦高手相助!
解决方案
解决方案二:
原因是因为你每次启动了一个新的线程,他们产生了竞态有好多种方法可以解决自己挑一个把1.使用lock锁,一个没完成前,其他线程只能等待2.使用线程安全队列,队列本身是先进先出,所以你后面怎么玩都是一个顺序3.使用thread.join让他们同步
解决方案三:
比较常用的就是加lock了
解决方案四:
你去查一下互锁,临界区这两个概念,就知道为什么有上诉原因了,一楼说的就是解决方法!
解决方案五:
共享资源没有上锁
解决方案六:
如果加lock就变成单线程模式了实现的方法:选择某行,执行发布,都是同步执行,互相不影响到数据(调用到同一函数)麻烦帮忙解答一下,谢谢!
解决方案七:
只lock住show这个方法(加上上面的coilCount?)不可以吗?感觉这段代码才是导致楼主说的数据混乱的关键。就是等我show完之后你才能进来show,不然两个同时在show是什么回事嘛。涉及到全局资源的话肯定只能是锁了,这个资源一次只能被一个线程使用才是。
解决方案八:
coilCount获取是值都是一样的,这个没关系。因为多了个while循环某个数据进行轮播如果等一个执行完,在执行另外一个,就达不到效果。show是公有资源,包含连接设备上传数据并显示