Если я создам std::thread, который завершится до того, как я смогу вызвать для него detatch()
, каково ожидаемое поведение? Следует ли генерировать исключение из-за того, что joinable
уже является ложным?
Если это так, то есть ли способ создать поток, который инициализируется в отсоединенном состоянии, чтобы я мог избежать этой ошибки?
Пример:
void func()
{
// do something very trivial so that it finishes fast
int a = 1;
}
void main()
{
thread trivial(func);
trivial.detach();
}
Я понимаю, что на практике нецелесообразно создавать поток для выполнения тривиальной работы, однако мне удалось столкнуться с таким поведением, и мне было любопытно узнать, есть ли способ обойти это...
joinable()
не зависит от того, завершил ли поток выполнение. В вашем сценарииjoinable()
на самом деле не станетfalse
, пока вы не вызоветеdetach()
. Здесь нет проблем, нуждающихся в обходном пути. - person Igor Tandetnik   schedule 10.12.2014