Если вы не закроете свой код обновления блокировкой и разблокировкой мьютекса, поток обновления (ваш последний пункт) не будет заботиться о блокировке основным потоком. Это просто обновит эти данные.
Вы должны использовать один и тот же объект мьютекса (просто создайте его для всего потока обновления и основного потока) в потоке обновления перед обновлением переменных. Таким образом, основной поток не получит доступ к этим данным, пока поток обновления осуществляет доступ, и наоборот.
Возможно, вы захотите внимательно посмотреть, как мьютекс используется для синхронизации потоков.
ОБНОВЛЕНИЕ: ДЛЯ ВАШЕГО ВОПРОСА
"Таким образом, везде, где у меня есть переменная, небезопасная для потока, я должен окружать все обращения к этой переменной одним и тем же мьютексом?"
Да, но вам также следует знать о сценариях, в которых может возникнуть тупик. взаимоблокировки являются основной причиной, по которой многопоточность избегается во многих приложениях или, другими словами, многим многопоточность не нравится.