我在visual studio项目中创建了应用程序设置,包含用户范围设置和应用程序范围设置。我的应用程序有几个线程可以同时访问设置以进行读取或写入。我搜索过MSDN,看看用户可以在运行时更新的作用域设置是否是线程安全的,但找不到明确的答案。有人知道吗?
提前致谢!
答案 0 :(得分:3)
线程安全不仅仅是“这会破坏数据结构。”
在设置环境中,您需要考虑三种不同的含义。设置数据结构在其中一个中是安全的,但在其他两个中则不安全。
在第一种情况下,是的,设置数据结构是线程安全的。您将无法在设置中写入半Int64,并冒险让另一个线程观察到该中途值。
但是,如果您按顺序设置多个值,则无法保证另一个线程无法读取两个此类set语句之间的所有设置,观察一个更改,而不是另一个。
换句话说,您可以拥有以下场景:
Thread 1 Thread 2
set setting 1
read setting 1
read setting 2
set setting 2
在读取值,从您读取的值计算新值并将其设置回来的情况下,无法保证另一个线程无法执行相同操作(即更改当前值)与此同时。
像这样:
Thread 1 Thread 2
read setting 1
read setting 1
calculate new value
write setting 1
calculate new value
write setting 1
对于后两种情况,您需要一个可以锁定的外部同步对象,以确保您没有进行中途更改或丢失更改,但是以这种方式访问设置的所有代码都需要锁定那个对象。
答案 1 :(得分:0)
Visual Studio应用程序设置设计器生成的包装器是一个带有索引器的同步单例,它将以线程安全的方式获取和设置应用程序设置属性。