В языке с++ перменная, объявленная в инициализаторе цикла for, освобождается при завершения цикла.
Надо сделать класс, в конструкторе которого мутекс запирается, а в деструкторе мутекс отпирается, а так же две операции -- инкремент и проверка на завершение (для организации цикла)
Пример кода:
include <iostream>
class Mutex
{
private:
public:
    Mutex() {}
    ~Mutex() {}
    void lock() { std::cerr << "Locked\n"; }
    void unlock() { std::cerr << "Unocked\n"; }
};
class Local_Lock {
private:
    Mutex & _mutex;
    int _i;
public:
    Local_Lock(Mutex & mutex) : _mutex(mutex), _i(0) { _mutex.lock(); }
    ~Local_Lock() { _mutex.unlock(); }
    bool test() { return (_i == 0); }
    void next() { _i ++; }
};
#define syncronized(mutex) for (Local_Lock __local_lock_var(mutex); __local_lock_var.test(); __local_lock_var.next()) 
int main()
{
    Mutex & m = *(new Mutex);
    syncronized(m) {
        std::cerr << "In 'syncronized' block\n";
        Mutex & m2 = *(new Mutex);
        syncronized(m2) {std::cerr << "In 'syncronized' block, 2\n"; }
    }
    for (Local_Lock ll(m); ll.test() ; ll.next())
    { std::cerr << "In ''for'' block\n"; }
    
    return 0;
}
Программа порождает такой вывод: 
Locked
In 'syncronized' block
Locked
In 'syncronized' block, 2
Unocked
Unocked
Locked
In ''for'' block
Unocked