Вот два простых идей, и справочный документ:
1) Вместо того, чтобы приращение счетчика на 1, увеличение его на N, эффективно давая клиентам широкий выбор идентификаторов транзакций [C, C + N). Например, если N = 5, и начальное значение счетчика равно 1, то клиенты А, В, и С, получили бы следующее:
A: [1, 2, 3, 4, 5]
B: [6, 7, 8, 9, 10]
C: [11, 12, 13, 14, 15]
В то время как это уменьшает давление на атомном счетчика, так как мы можно увидеть из этого примера, некоторые клиенты (например, клиент C) получат относительно высокий диапазон идентификаторов, в то время как другие получат более низкие диапазоны (клиент A), и это приведет к более высоким коэффициентам прерывания в системе.
2) Диапазоны использования чередующиеся идентификаторы транзакций. Это похоже на 1, но мы добавили шаговую переменную S. Вот простой пример: если N = 5 и S = 3, а начальное значение счетчика равно 1, клиенты AB и C получат следующее:
A: [1, 4, 7, 10, 13]
B: [2, 5, 8, 11, 14]
C: [3, 6, 9, 12, 15]
Это, кажется, решена проблема 1, но считает клиент D:
D: [16, 19, 22, 25, 28]
Теперь мы вернулись к той же проблеме, что решение # 1 было. Трюки должны быть воспроизведены с помощью этой техники, чтобы «правильно понять».
3) Интересно, но более сложная, децентрализованный способ присваивающих идентификаторов транзакций описано здесь:
Tu, Стивен, Wenting Чжэн, Эдди Колера, Лисков, и Сэмюэль Мэдден. «Быстрые транзакции в многоядерных базах памяти». В материалах двадцать четвертого симпозиума ACM по принципам операционных систем, стр. 18-32. ACM, 2013.