Вы можете использовать массив для удаления и повторной индексации.
let item = {
0: 'A',
1: 'B',
2: 'C',
3: 'D'
};
// get values as an array
let arr = Object.values(item);
// remove element at index 1
arr.splice(1, 1);
// extract array to an object
item = {
...arr
};
console.log(item);
Реестр удостоверится, что действия являются атомарными, таким образом, Вы не должны синхронизировать его сами.
Однако, если у Вас есть несколько процессов / потоки, получающие доступ к реестру одновременно, он не делает гарантий, о которых происходит сначала. Только то, что Вы не получите искаженные данные.
Править: Дополнительные материалы для чтения, посмотрите неспособность заблокировать, кто-то из реестра - функция, не ошибка.
Как другие упомянули, отдельные операции являются атомарными. Если необходимо сделать больший набор операций атомарным, и Вы нацелены на 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 эти методы.
Windows Server 2008 также имеет поддержку транзакционного доступа к реестру. Вот обзор в MSDN. И вот сообщение в блоге, объявляющее об этом с некоторыми вопросами и ответами.
Возьмите быстрое чтение этой статьи Raymond Chen. Это объясняет, что отдельные записи и чтения против реестра являются атомарными. Однако другая блокировка ваше дело, поскольку существует теперь способ удержать клавишу, открытую исключительно.
http://blogs.msdn.com/oldnewthing/archive/2009/03/26/9508968.aspx
Это зависит от того, что Вы передаете, и насколько строго ограниченный во времени информация. Скажите, например, что у Вас есть приложение, делающее работу и пишущее результаты состояния в ключ реестра и другое приложение, читая то состояние и отображая его на экране. В этом случае я не обеспокоился бы взаимным исключением, поскольку читатель будет всегда получать значение, которое "имеет смысл". То, что Вы спрашиваете, является действительно фундаментальным вопросом дизайна параллелизма, я думаю.