Win32注册表是线程安全的吗?

18

如果我有两个进程访问一个给定的注册表键(例如HKLM),那么我是否应该在代码中使用互斥锁?

5个回答

24

注册表会确保操作是原子性的,因此您无需自己同步。

但是,如果您有多个进程/线程同时访问注册表,则不能保证哪个先发生。 只能确保不会出现乱码数据。

编辑:更多阅读,请参见“无法锁定注册表不是错误,而是功能”


文章已移至:https://devblogs.microsoft.com/oldnewthing/20090326-00/?p=18703 - Ed Bayiates

5

2

Windows Server 2008还支持对注册表进行事务访问。在MSDN上这里有一个概述。这是一篇博客文章,宣布了一些问题和答案。


1

1
文章已移至:https://devblogs.microsoft.com/oldnewthing/20090326-00/?p=18703 - Ed Bayiates

0

这取决于你要传达什么信息以及信息的时间紧迫程度。例如,假设你有一个应用程序正在执行工作并将状态结果写入注册表键,另一个应用程序正在读取该状态并在屏幕上显示它。在这种情况下,我不会费心使用互斥锁,因为读者总是会得到一个“有意义”的值。我认为你所问的实际上是并发设计的基本问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接