【发布时间】:2023-03-30 09:55:01
【问题描述】:
我刚刚遇到一个问题 - 在 C# 中跨线程安全地访问对象是否可行。
例如用代码
//Somewhere long ago
MyClass myVar = new MyClass("First Instance");
//Then later, happening at the same time
//In thread one
myVar = new MyClass("Second Instance");
//In thread two
myVar.PrintName();
我不在乎是使用第一个实例还是第二个实例,但是 myVar 是否可能在某些时候根本无效(例如,指向一个不存在的位置,因为对象引用可能只是部分更新在其他线程中使用之前)
关于锁的附加问题:
如果我留下一个锁 - 那么所有未完成的写入都会提交到内存吗?
我的问题是如果我在锁中引用一个变量,我知道只有一个线程可以同时访问锁 - 但是我是否会在一个线程中写入变量(并且写入只是完成到缓存),然后在另一个线程中甚至在锁内部获取变量的旧值(因为缓存没有提交或者我在这个线程的缓存中仍然有一个旧值)?
【问题讨论】:
标签: .net multithreading locking