Multithreading Win32注册表线程安全吗?

Multithreading Win32注册表线程安全吗?,multithreading,winapi,synchronization,registry,Multithreading,Winapi,Synchronization,Registry,如果我有两个进程访问给定的注册表项(例如,HKLM),我是否应该将逻辑包装在互斥锁中?注册表将确保操作是原子的,因此您不必自己同步它 但是,如果有多个进程/线程同时访问注册表,则无法保证哪一个先发生。只是你不会得到乱码的数据 编辑:进一步阅读,请参阅。,这取决于您所交流的内容以及信息的时间要求。例如,假设您有一个应用程序正在工作并将状态结果写入注册表项,而另一个应用程序正在读取该状态并将其显示在屏幕上。在这种情况下,我不需要考虑互斥,因为读者总是会得到一个“有意义”的值。我认为,您所问的实际上是

如果我有两个进程访问给定的注册表项(例如,
HKLM
),我是否应该将逻辑包装在互斥锁中?

注册表将确保操作是原子的,因此您不必自己同步它

但是,如果有多个进程/线程同时访问注册表,则无法保证哪一个先发生。只是你不会得到乱码的数据


编辑:进一步阅读,请参阅。

,这取决于您所交流的内容以及信息的时间要求。例如,假设您有一个应用程序正在工作并将状态结果写入注册表项,而另一个应用程序正在读取该状态并将其显示在屏幕上。在这种情况下,我不需要考虑互斥,因为读者总是会得到一个“有意义”的值。我认为,您所问的实际上是并发设计的一个基本问题。

快速阅读这篇Raymond Chen的文章。它解释了针对注册表的单个写入和读取是原子的。然而,其他的锁定取决于你们,因为现在有办法保持钥匙完全打开


Windows Server 2008还支持对注册表的事务性访问。在MSDN。下面是一个带有一些问题和答案的公告。

正如其他人所提到的,单个操作是原子的。如果您需要使一组更大的操作原子化,并且您的目标是Vista或更好,那么您可以使用Vista中添加的事务性注册表支持

不幸的是,没有直接的托管支持,所以您需要创建包装器。显示如何P/调用这些方法。

文章已移动:文章已移动: