Re: Транзакция с помощью рандома и задержки
От: Qulac Россия  
Дата: 23.03.25 09:57
Оценка: :))
Здравствуйте, Shmj, Вы писали:

S>Ну давайте с простого. Имеем:


S>1. Функция чтения (ну пусть атомарно).

S>2. Функция записи (так же атомарно).
S>3. ГСЧ.
S>4. Функция задержки времени.

S>Нужно:


S>1. Считать число (изначально 0).

S>2. Увеличить число на 1.
S>3. Записать число.

S>Но при этом нужно чтобы все это корректно работало в многопоточной среде. Т.е. сколько было вызовов чтения/записи (ну или потоков, который выполнили чтение а затем конечную запись) — столько должно быть установлено значение счетчика.


S>Добавлю что считывать и записывать — можно произвольное значение, а не только числа.


S>Так же можно сузить определение гарантированности — считаем что GUID т.е. 16 случайных байт — гарантированно уникальный, что второй такой же не будет создан за время существования Вселенной.


S>Можно ли как-то гарантировать, не имея мьютексов и пр. блокировок — а только 4 функции из списка?


1.Получаем значение гсч от 0 до бесконечности
2. Делаем задержку равную выданному гсч значению
3. Выполняем операции

В таком варианте вероятность что два потока помешают друг другу близка к нулю.
Программа – это мысли спрессованные в код
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.