DTF>А если в test_and_set указать флаг memory_order_acq_rel, то всё будет работать правильно.
Если под правильностью понимать, что lock захватить может одновременно не более одного потока, то будет работать правильно при любых допустимых параметрах в test_and_set и clear.
DTF>Правильно ли я понимаю, что при такой реализации его одновременно могут захватить несколько потоков,
Нет, не могут.
DTF>т.к. если один установил значение c memory_order_acquire, то не факт, что остальные потоки это увидят.
Увидят — это факт.
memory_order на это не влияет. Он нужен вообще не для самой установки atomic_flag, а чтобы показать как с этой установкой должны взаимодействовать другие операции чтения и записи в память. В твоём коде таких операций вообще нет — тут просто нечему ломаться.