Является ли 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?

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

try_acquire
, которые соблюдают результат эффектов.

Затем о приобретении :

эффекты : повторно выполняет следующие шаги, в порядке:

- evalles try_acquire (). Если результат верно , возврат.

- блокирует *This до счетчика больше нуля.

Итак, из этого я предполагаю, что релиз сильно возникает до приобретения anbetride
anboble anbody anble/preshire
anbount anbody: p> about shode/preshire. />
[ Примечание 11 < /em>: Неофициально, если a < /em> сильно случается до b < /em>, то a < /em>

, по -видимому, оценивается до b < /em> во всех контекстах. - end note ]

Так, что, по -видимому, оценивается до того, как я могу с уверенностью предположить, что функция больше не работает?

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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