Size: a a a

2020 December 05

SS

Sergey Skvortsov in pro.cxx
Andrew
Не понял вот этого. Если я пишу код std::thread(callback_f).join(), то, если колобок придет пустым, кажется, ничто не мешает ему к моменту после старта, но перед джином завершиться.
Я не вижу пока способа синхронизировать вызовы joinable и join.
Ещё раз
источник

SS

Sergey Skvortsov in pro.cxx
Sergey Skvortsov
A thread that has finished executing code, but has not yet been joined is still considered an active thread of execution and is therefore joinable.
.
источник

A

Andrew in pro.cxx
А, дошло, типа, он сам в joinable==false никогда не переключится?
источник

SS

Sergey Skvortsov in pro.cxx
Да
источник

ПК

Побитый Кирпич... in pro.cxx
Andrew
Невызов деструктора при вызванном конструкторе может не быть UB? И я что-то не уверен, что там даже завершение вызова конструкторов гарантируется в таком случае.
Утечка памяти не UB, считай объекты со стека утекли)
источник

A

Andrew in pro.cxx
Тогда я не правильно понял joinable, ок, спасибо.
источник

A

Andrew in pro.cxx
Побитый Кирпич
Утечка памяти не UB, считай объекты со стека утекли)
Так мало ли что там в деструкторе делается, а если это RAII-wrapper над чем-то внешним стейтовым?
источник

ПК

Побитый Кирпич... in pro.cxx
Andrew
Так мало ли что там в деструкторе делается, а если это RAII-wrapper над чем-то внешним стейтовым?
Это частный случай, такие вещи не юзай
источник

m

magras in pro.cxx
Andrew
А, дошло, типа, он сам в joinable==false никогда не переключится?
На сколько я знаю joinable() == false означает что это либо null тред, либо detached тред.
источник

m

magras in pro.cxx
Под null тред, я имею в виду результат вызова дефолтного конструткора std::thread.
источник

ПК

Побитый Кирпич... in pro.cxx
Хотя на самом деле я пока не видел юзкейсов где прям detach нужен, кроме костылирования асинхронных операций, для которых не detach нужен а тред пул
источник

ПК

Побитый Кирпич... in pro.cxx
magras
На сколько я знаю joinable() == false означает что это либо null тред, либо detached тред.
А joined?
источник

A

Andrew in pro.cxx
Что не юзать, RAII?
источник

VS

Vlad Serebrennikov in pro.cxx
Andrew
Так мало ли что там в деструкторе делается, а если это RAII-wrapper над чем-то внешним стейтовым?
это все-таки нарушение контракта внешнего объекта, а не UB
источник

m

magras in pro.cxx
Да, пропустил.
источник

ПК

Побитый Кирпич... in pro.cxx
Andrew
Что не юзать, RAII?
Raii невыполнение которого критично, да. Утечка памяти по мне не критична, зажим мьютекса - критично
источник

CD

Constantine Drozdov in pro.cxx
Я правильно понимаю, что не существует string + string_view?
источник

A

Andrew in pro.cxx
Побитый Кирпич
Raii невыполнение которого критично, да. Утечка памяти по мне не критична, зажим мьютекса - критично
Ну мы же рассматриваем ситуацию завершения main-треда, там уже мьютексы не так важны, особенно, если все и так умирает без деструкторов. Вот если там какой-то их аналог для межпроцессорного взаимодействия и ты таким образом "идейно" что-то не анлокнул (стоп-сообщение другому процессу и т.д.), тогда это уже печально, но да, не UB.
источник

m

magras in pro.cxx
Constantine Drozdov
Я правильно понимаю, что не существует string + string_view?
Интересно почему?
string += string_view есть.
источник

VS

Vlad Serebrennikov in pro.cxx
Andrew
Невызов деструктора при вызванном конструкторе может не быть UB? И я что-то не уверен, что там даже завершение вызова конструкторов гарантируется в таком случае.
если вкратце, то время жизни объекта можно закончить, освободив или переиспользовав storage, но только если деструктор тривиальный, иначе UB
http://eel.is/c++draft/basic.life#1
http://eel.is/c++draft/basic.life#5
http://eel.is/c++draft/basic.life#6.1
источник