【发布时间】:2018-10-15 05:13:57
【问题描述】:
以这个程序为例:
class Program
{
public static double myVar1 = 0;
public static double myVar2 = 0;
static void Main()
{
Thread thread1 = new Thread(new ThreadStart(update_variable));
thread1.Start();
while (true)
{
myVar2 = myVar1;
}
}
static update_variable()
{
while (true)
{
myVar1 = 2222222.22;
myVar1 = 1111111.11;
}
}
}
myVar2 是否有可能等于 222222.22 或 1111111.11 以外的值?换句话说,变量的字节是“全部改变还是全部改变”,或者当一些字节发生改变而其他字节没有改变时,主线程能否及时看到 myVar1 的实例,从而给出意外的值?
我已经测试了上面的程序并没有看到这种行为,但我想知道它是否可能以及这是否会被视为线程安全代码。我宁愿不使用锁的资源,因为我只有一个线程更改数据和一个使用数据的线程。
【问题讨论】:
-
Specification:其他类型的读写,包括
long、ulong、double、decimal,以及用户自定义类型,不保证是原子的。
标签: c# multithreading thread-safety locking