В C++ я чувствую, что мне всегда приходилось верить, что такие вещи, как var ++ и var, являются достаточно потокобезопасными - AKA - у вас есть гарантия того, что ваше значение будет увеличиваться или уменьшаться в определенный момент времени.var ++ или var-- not threadsafe?
Именно по этой убежденности я построил свое понимание неблокирующих алгоритмов для потокобезопасных операций. Тем не менее, сегодня я в шоке, поскольку у меня есть переменная, которая не увеличивается, и поэтому ставит под сомнение обоснованность большого количества моей прошлой работы.
В небольшой программе у меня есть глобальная переменная, инициализированная в 0. Запущено восемь P-Threads, каждый из которых вызывает varname ++ в общей сложности 1024 раза и составляет до 8 * 1024 приращений. Но после того, как все потоки завершили выполнение, значение varname значительно меньше 8 * 1024.
Я пропустил здесь лодку? Может кто-нибудь, пожалуйста, просветит меня?
Почему вы считаете, что 'var ++' и 'var -' являются потокобезопасными? – Xymostech
'++' resp. '--' не являются атомарными операциями, поэтому хранилище измененного значения может быть после того, как другой поток прочитал (и, возможно, изменил) значение. –
@ Xymostech от алгоритмов класса, таких как неблокирующий кольцевой буффер, о котором я раньше думал, что я понял – user2126895