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

Jas*_*ver 17 registry winapi multithreading synchronization

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

i_a*_*orf 21

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

但是,如果您有多个进程/线程同时访问注册表,它不会保证首先发生哪些情况.只有你不会得到乱码数据.

编辑:进一步阅读,请参阅无法锁定注册表中的某人是一项功能,而不是一个错误.


Mic*_*ael 5

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

不幸的是,没有直接的托管支持,因此您需要创建包装器。http://community.bartdesmet.net/blogs/bart/archive/2006/12/14/Windows-Vista-2D00 -Introducing -TxR-in-C_2300_-_2800_Part-1_2900_.aspx展示了如何 P/Invoke 这些方法。