当前位置: 代码迷 >> C# >> 一个全局变量,一个线程只读该变量,一个线程只写该变量,亟需线程同步吗
  详细解决方案

一个全局变量,一个线程只读该变量,一个线程只写该变量,亟需线程同步吗

热度:426   发布时间:2016-04-28 08:42:36.0
一个全局变量,一个线程只读该变量,一个线程只写该变量,需要线程同步吗?
1.  WINCE7开发,.基于Net 3.5, C#
2.  串口通信的数据量比较大,所以想把UI刷新单独在另一个刷新频率较低的线程中进行;(数据频率为 500Hz, UI 刷新频率为20Hz)

3. 这样串口线程需要将值赋予全局变量,UI线程需要读取全局变量的值,

这种情况下,这两个线程需要进行同步吗?

目前不同步的情况下,初步测试了下感觉也没出什么大问题,不知道会不会造成异常?



------解决思路----------------------
串口速率决定了数据量级无法很高.
------解决思路----------------------
UI如果不是通过异步线程读取全局变量,我认为无需同步。
------解决思路----------------------
要看你读取什么类型
如果是基本类型(int,float之类的),那没问题。
如果是集合的元素(比如List),那读写还是需要加lock的
------解决思路----------------------
单独一个数值的话不需要同步,不过最好用 volatile 修饰,保证读取到最新的值。
------解决思路----------------------
单独的数值不需要同步,因为只有一个写线程,而单独数值的写可以认为是原子的,当然,要是结构什么的,如果操作不能被视为原子的,就必须加锁了,防止读到更新一般的数据
------解决思路----------------------
引用:
目前不同步的情况下,初步测试了下感觉也没出什么大问题,不知道会不会造成异常?


不知道。

编程以测试为准。如果没有想好测试,就没有必要扯到什么特定的理论上。如果说要怎么怎么,必定要以能够拿出测试用例来重现问题为准。如果暂时连测试都写不出来,那么就没有必要画蛇添足去改什么代码。
  相关解决方案