Является ли std :: binary_semaphore release () гарантированно финишировать раньше, чем приобретение ()?C++

Программы на C++. Форум разработчиков
Anonymous
Является ли std :: binary_semaphore release () гарантированно финишировать раньше, чем приобретение ()?

Сообщение Anonymous »

Допустим, у меня есть следующий класс < /p>

Код: Выделить всё

class MyClass
{
std::binary_semaphore sem{0};
std::binary_semaphore& sem(); // just returns the semaphore
// some other members
}
< /code>
И у меня есть некоторые глобальные функции < /p>
void func1(MyClass& obj)
{
// some code
obj.sem().release();
}

void func2(MyClass& obj)
{
// some code
obj.sem().acquire();
obj.~MyCLass();
}
Теперь, может быть, я слишком параноик, но если поток A вызывает func1 , в то время как поток B вызывает func2 в том же экземпляре MyClass , гарантированно ли метод affire () позже, чем релиз () ? Другими словами - разве не возможно, что поток B уничтожит объект (и семафор) перед выходом () ? И если это может произойти, это ub?

Подробнее здесь: https://stackoverflow.com/questions/796 ... an-acquire

Вернуться в «C++»