Причина в значительной степени историческая.boost::thread
пришел первым.Предложения для std::thread
были получены из boost::thread
и первоначально имели поведение, которое boost::thread
делает сейчас.
Однако в процессе стандартизации значительное число людей хотели от std::thread::~thread()
до join()
вдеструктор, если еще не присоединился, вместо detach()
.Аргументы были сделаны для каждой стороны, и голоса были взяты.50/50.Больше аргументов было сделано и больше голосов было принято.Некоторые люди были склонены к другой позиции.Но все равно 50/50.
Кто-то (я не помню, кто) предложил terminate()
.Голоса были взяты, и хотя это не было единодушно в пользу (я не мог голосовать за него), оно получило достаточно большинства, чтобы называться консенсусом.
Я думаю, boost::thread
никогда не менялся, потому что это былоустановленная база пользователей, и никто не хочет излишне нарушать код для этой базы пользователей.
Редактировать:
Ах, Роб указывает нам на оригинал этого дублирующего вопроса иэтот ответ указывает на N2802 , что включает в себя обоснование.
Следует также отметить, что исходное предложение для std::thread
имело отмену потока, а ~ thread () отменяет присоединенный поток, а затемотделить его, что имело большой смысл.Этот путь к коду обычно выбирается только тогда, когда родительский поток разматывается из-за исключительной ситуации.