Я могу удалить все эти блокировки вокруг этой переменной и просто использовать ключевое слово volatile при объявлении этой переменной.Это должно заботиться обо всем, что связано с синхронизацией.Это правильно?
Может быть.Возможно, нет.Получение правильного многопоточного кода чрезвычайно сложно.Получение правильного многопоточного кода с низким уровнем блокировки лучше оставить экспертам.
Каковы плюсы и минусы этого подхода?
Плюсы в том, что он может составлять несколько наносекундбыстрее, чтобы избежать блокировки.Минусы: если вы неправильно запрограммируете низкий уровень блокировки, то ваша программа выглядит так, как будто она работает нормально, а затем имеет причудливые режимы сбоев, которые невозможно отладить или воспроизвести.
Вы должны использовать только низкий уровеньРешение с блокировкой, когда ваш анализ производительности позволил вам сделать вывод, что решение с низким уровнем блокировки - это only способ достижения цели производительности, которую ваши клиенты требуют от вас.И вы должны использовать решение с низким уровнем блокировки только тогда, когда у вас есть тщательное и deep понимание каждой оптимизации, которую каждый возможный процессор, на котором когда-либо будет работать ваша программа, может выполнять с низким уровнем блокировкикод.Вам нужно будет глубоко понять модель памяти, которую вам гарантирует CLR, что гарантирует оборудование и каковы все различия.
Я сам не обладаю этим пониманием.Вот почему я не пишу ничего, кроме самого тривиального кода с низким уровнем блокировки, и у меня есть небольшой код с низким уровнем блокировки, который я пишу, тщательно проверенный ведущими экспертами отрасли.