Size: a a a

2020 October 08

D

Danya in pro.cxx
*популяризация Владимирова прошла успешно*
источник

A

Alex in pro.cxx
но можно ещё короткий ответ - всё-таки обязательно лочить перед notify, даже если логика моих потоков этого не требует? Хотелось бы сегодня дописать, а уже завтра смотреть)
источник

A

Alex in pro.cxx
Полчаса спорили в чате с коллегой, он не до конца понимает, зачем нужен этот лок, а я сначала тоже не понимал, а теперь думаю, что он защищает сам cv и потому необходим. И только как бонус можно ещё его же использовать для защиты своих данных, раз уж всё равно есть этот мьютекс. Т. е. вызовы wait() и notify() не потокобезопасны.
источник

オレンジ in pro.cxx
источник

A

Alex in pro.cxx
я там был, много воды, мало объяснений
источник

A

Alex in pro.cxx
хотя notify тут без лока
источник

m

magras in pro.cxx
Ofee
Нет, работа с препроцессором через рефлексию – врата в ад, сейчас комитет движется в сторону отказа от препроцессора, так что стоит ждать какой-то другой инструмент для решения этой задачи

Или не ждать. Лично я чаще имплементацию платформо-зависимых фич выношу в отдельные файлы и выбираю их на уровне системы сборки, пусть это и не всегда удобный вариант
А вообще что осталось от препроцессора в плюсах?

Инклюды заменили модулями.

__LINE__ и компанию заменили std::source_location.

Рефлексия забирает на себя проблемы сериализации и простой кодогенерации.

Какие еще не решенные задачи остались? Я могу вспомнить лишь несколько:
1) Условная компиляция.
2) Генерация уникальных имен.
3) Передача в код внешних переменных через дефайны.
4) Сокращение бойлерплейта.

Препроцессор не идеально, но все же неплохо решает все эти проблемы.

Если брать растовские процедурные макросы, они в основном крутятся вокруг антоаций. Я бы не отказался от них в плюсах, но это больше расширение чем замена препроцессора, на мой взгляд.

Просто при использовании препроцессора по делу, я не могу вспомнить каких то серьезных проблем. Поэтому у меня есть ощущение что препроцессор хотят выкинуть просто потому что его все ругают.
источник

A

Alex in pro.cxx
Кодогенерация - основное применение, ИМХО (включая пункт 2, но не только)
источник

A

Alex in pro.cxx
скажем так, самое незаменимое на данный момент
источник

m

magras in pro.cxx
Alex
Кодогенерация - основное применение, ИМХО (включая пункт 2, но не только)
А кодогенерация чего? Просто мне она в подавляющем числе случаев была нужна для сериализации, которую закрывает рефлексия.
источник

A

Alex in pro.cxx
Макросы позволяют избежать дублирования кода, который на С++ нельзя написать только один раз. Например, потому что там разные идентификаторы, которые макрос может принять и подставить.
источник

A

Alex in pro.cxx
Возвращаясь к моему вопросу о cv: не поставил фигурные скобки (скоуп лока) - получил дедлок. Офигенный дизайн.

m_bTerminate = true;

{
 std::unique_lock<std::mutex> lk(m_cvMutex);
 m_cv.notify_all();
}

if (m_thread.joinable())
 m_thread.join();
источник

CD

Constantine Drozdov in pro.cxx
Alex
Возвращаясь к моему вопросу о cv: не поставил фигурные скобки (скоуп лока) - получил дедлок. Офигенный дизайн.

m_bTerminate = true;

{
 std::unique_lock<std::mutex> lk(m_cvMutex);
 m_cv.notify_all();
}

if (m_thread.joinable())
 m_thread.join();
а в чем вопрос
источник

CD

Constantine Drozdov in pro.cxx
что смысл кода может измениться вплоть до UB от убирания фигурных скобок?
источник

CD

Constantine Drozdov in pro.cxx
std::mutex foo;
{
 std::lock_guard bar1{foo};
}
{
 std::lock_guard bar2{foo};
}
источник

A

Alex in pro.cxx
вопрос был в том, зачем cv вообще нужен этот лок. Какие именно манипуляции локом от меня требуются для корректной работы cv. Этот момент плохо документирован, примеры часто переусложнены и там этот лок используется и для пользовательских данных, что мешает понять истинное его назначение.
источник

CD

Constantine Drozdov in pro.cxx
потому что вы можете написать свой класс cv + lock, но не можете (cv+lock)-lock?
источник

CD

Constantine Drozdov in pro.cxx
что характерно, документация четко указывает, что не стоит держать блокировку при notify
источник

O

Ofee in pro.cxx
magras
А вообще что осталось от препроцессора в плюсах?

Инклюды заменили модулями.

__LINE__ и компанию заменили std::source_location.

Рефлексия забирает на себя проблемы сериализации и простой кодогенерации.

Какие еще не решенные задачи остались? Я могу вспомнить лишь несколько:
1) Условная компиляция.
2) Генерация уникальных имен.
3) Передача в код внешних переменных через дефайны.
4) Сокращение бойлерплейта.

Препроцессор не идеально, но все же неплохо решает все эти проблемы.

Если брать растовские процедурные макросы, они в основном крутятся вокруг антоаций. Я бы не отказался от них в плюсах, но это больше расширение чем замена препроцессора, на мой взгляд.

Просто при использовании препроцессора по делу, я не могу вспомнить каких то серьезных проблем. Поэтому у меня есть ощущение что препроцессор хотят выкинуть просто потому что его все ругают.
В зависимости от того, что понимается под генерацией уникальных имён, эту роль тоже могут выполнить лупхолы (точнее, генерация уникального типа, но мне трудно представить ещё какой-то юзкейс)

Можно было бы сказать, что это плохой инструмент, но и генерация уникальных имён – такая себе задача
источник

ПК

Побитый Кирпич... in pro.cxx
15.30
Или это не то
Это не то
источник