Действительно ли реестр Win32 ориентирован на многопотоковое исполнение?

Вы можете использовать массив для удаления и повторной индексации.

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);

17
задан tambre 18 June 2018 в 15:35
поделиться

5 ответов

Реестр удостоверится, что действия являются атомарными, таким образом, Вы не должны синхронизировать его сами.

Однако, если у Вас есть несколько процессов / потоки, получающие доступ к реестру одновременно, он не делает гарантий, о которых происходит сначала. Только то, что Вы не получите искаженные данные.

Править: Дополнительные материалы для чтения, посмотрите неспособность заблокировать, кто-то из реестра - функция, не ошибка.

21
ответ дан 30 November 2019 в 12:51
поделиться

Как другие упомянули, отдельные операции являются атомарными. Если необходимо сделать больший набор операций атомарным, и Вы нацелены на 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 эти методы.

4
ответ дан 30 November 2019 в 12:51
поделиться

Windows Server 2008 также имеет поддержку транзакционного доступа к реестру. Вот обзор в MSDN. И вот сообщение в блоге, объявляющее об этом с некоторыми вопросами и ответами.

2
ответ дан 30 November 2019 в 12:51
поделиться

Возьмите быстрое чтение этой статьи Raymond Chen. Это объясняет, что отдельные записи и чтения против реестра являются атомарными. Однако другая блокировка ваше дело, поскольку существует теперь способ удержать клавишу, открытую исключительно.

http://blogs.msdn.com/oldnewthing/archive/2009/03/26/9508968.aspx

1
ответ дан 30 November 2019 в 12:51
поделиться

Это зависит от того, что Вы передаете, и насколько строго ограниченный во времени информация. Скажите, например, что у Вас есть приложение, делающее работу и пишущее результаты состояния в ключ реестра и другое приложение, читая то состояние и отображая его на экране. В этом случае я не обеспокоился бы взаимным исключением, поскольку читатель будет всегда получать значение, которое "имеет смысл". То, что Вы спрашиваете, является действительно фундаментальным вопросом дизайна параллелизма, я думаю.

0
ответ дан 30 November 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: