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