является foo () обратным вызовом?
foo()
является функцией или макросом.
почему макрос мьютекса в main имеетbody?
Возможно, потому что цикл for
в DO_MUTEX
отсутствует.
Чтобы лучше понять код, попробуйте развернуть макросы вручную.Затем вы получите что-то вроде:
int main()
{
auto &counter = UNIQUE_COUNTER(my_mutex);
for (counter = 1, lock(my_mutex); counter == 1; --counter, unlock(my_mutex))
{
foo();
}
.
.
.
}
Я не знаю, к чему расширяется UNIQUE_COUNTER()
, поэтому я предполагаю, что он возвращает ссылку на некоторый тип счетчика или целочисленного типа.