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

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

Похожие вопросы