3

我在我的 Visual Studio 项目中创建了应用程序设置,其中包含用户范围设置和应用程序范围设置。我的应用程序有几个线程可以同时访问读取或写入设置。我搜索了 MSDN 以查看可以在运行时更新的用户范围设置是否是线程安全的,但找不到明确的答案。有人知道吗?

提前致谢!

4

2 回答 2

3

线程安全不仅仅是“这会破坏数据结构”。

在设置的上下文中,您需要考虑三个不同的含义。设置数据结构在其中一个中是安全的,但在其他两个中则不安全。

  1. 设置和读取单个值
  2. 同时设置和读取多个值,获取或设置一致的图片
  3. 通过使用当前值计算新值来调整值,然后再将其重新设置

在第一种情况下,是的,设置数据结构是线程安全的。您将无法将半 Int64 写入设置,并冒着另一个线程观察到该中间值的风险。

但是,如果您按顺序设置多个值,则不能保证另一个线程不能读取两个这样的设置语句之间的所有设置,观察一个变化,而不是另一个。

换句话说,你可以有这样的场景:

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

对于后两种情况,您需要一个可以锁定的外部同步对象,以确保您不会获得中途更改或丢失更改,但是所有以这种方式访问​​设置的代码都需要锁定该对象。

于 2011-11-20T11:07:41.510 回答
0

Visual Studio 应用程序设置设计器生成的包装器是一个带有索引器的同步单例,它将以线程安全的方式获取和设置应​​用程序设置属性。

于 2011-11-20T10:59:03.143 回答