Не имеет значения для правильности блокировки.Причина в том, что, даже если предположить, что какой-то другой поток ожидает блокировки mutex1, а затем mutex2, в худшем случае он сразу же запланируется, как только вы отпустите mutex1 (и получит mutex1).Затем он блокирует ожидание mutex2, который поток, о котором вы спрашиваете, выпустит, как только он снова запланирован, и нет никаких причин, которые не должны были бы произойти в ближайшее время (немедленно, если это только два потока в игре).
Таким образом, производительность может быть незначительной в этой конкретной ситуации по сравнению с тем, если вы сначала выпустили mutex2 и, таким образом, была только одна операция перепланирования.Ничто из того, что вы обычно ожидаете прогнозировать или беспокоиться, однако, все это находится в границах «планирования часто не является детерминированным».
Порядок, в котором вы снимаете блокировки, безусловно, может повлиять на планирование в целом.Предположим, что есть два потока, ожидающих вашего потока, и один из них заблокирован на mutex1, а другой заблокирован на mutex2.Может получиться, что какую бы блокировку вы ни снимали первыми, этот поток запускается первым, просто потому, что ваш поток пережил свое приветствие (потратил больше, чем весь временной интервал) и, следовательно, отключается по расписанию, как только все остальное становится работоспособным.Но это не может вызвать ошибку в программе, в противном случае правильной: вам не разрешено полагаться на то, что ваш поток отменен, как только он снимает первую блокировку.Таким образом, либо порядок этих двух ожидающих потоков, запущенных одновременно, если у вас несколько ядер, либо два чередующихся на одном ядре, должны быть одинаково безопасны в зависимости от того, как вы снимаете блокировки.