@Riki-tiki-tavi

Как работает этот код?

Есть примерно такой код, взятый из библиотеке Poco
class A
{
	static void f()
	{
		//какой-то код
		static unsigned long count = 0;
		mutex.lock();
		unsigned long n = count++;
		mutex.unlock();
		//какой-то код
	}
};

Может ли n быть больше нуля, если перед этим мы делаем count = 0? И зачем здесь mutex не совсем понятно. Не мог бы кто-нибудь пояснить?
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
@MiiNiPaa
Может ли n быть больше нуля, если перед этим мы делаем count = 0?
static unsigned long count = 0;
Объявляет и инициализирует переменную. Переменная инициализируется только раз за время своей жизни. В случае статической переменной — перед первым запуском функции.
То есть, начальное значение n — 0, после этого обратно в ноль она больше не сбрасывается.
зачем здесь mutex
Подумайте, что случится. если два потока наткнутся на инкремент одновременно юез синхронизации. Особенно при существовании кэша, присутствии оптимизаций, консолидирующих запись в память и тому подобного. На самом деле тут лучше использовать атомик, ну да ладно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы