Size: a a a

2021 February 11

IZ

Ilia Zviagin in pro.cxx
Виктор
Ребята, подскажите, первый раз такое вижу.
http://pastie.org/p/4VqRBxkLOF1llG7vJbjb89

Когда я раскоменчиваю строку:
log("proActiveExporter-2");

То всё нормально работает, он входит в условие которое идет дальше. Но если я её закоменчиваю - то он не заходит в условие. Что это за магия?
Ты случайно не в нескольких потоках тут работаешь?
источник

В

Виктор in pro.cxx
Да, пока что в 3-х
источник

IZ

Ilia Zviagin in pro.cxx
Виктор
Ребята, подскажите, первый раз такое вижу.
http://pastie.org/p/4VqRBxkLOF1llG7vJbjb89

Когда я раскоменчиваю строку:
log("proActiveExporter-2");

То всё нормально работает, он входит в условие которое идет дальше. Но если я её закоменчиваю - то он не заходит в условие. Что это за магия?
В общем это банальные гонки.
Некорректная программа, в ней UB и порядок работы вообще не определён, как она будет работать -- неизвестно
источник

IZ

Ilia Zviagin in pro.cxx
Виктор
Ребята, подскажите, первый раз такое вижу.
http://pastie.org/p/4VqRBxkLOF1llG7vJbjb89

Когда я раскоменчиваю строку:
log("proActiveExporter-2");

То всё нормально работает, он входит в условие которое идет дальше. Но если я её закоменчиваю - то он не заходит в условие. Что это за магия?
Также , тут нельзя делать

thProActiveExporter.detach();

Надо дождаться завершения фоновых потоков. Ещё одно UB
источник

В

Виктор in pro.cxx
Ilia Zviagin
Также , тут нельзя делать

thProActiveExporter.detach();

Надо дождаться завершения фоновых потоков. Ещё одно UB
Это я сократил. Там в main тоже while крутится
источник

В

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

IZ

Ilia Zviagin in pro.cxx
Виктор
преждевременного завершения программы не случается
но это ещё не повод радоваться жизни... программа от этого лучше не становится
источник

В

Виктор in pro.cxx
Ilia Zviagin
В общем это банальные гонки.
Некорректная программа, в ней UB и порядок работы вообще не определён, как она будет работать -- неизвестно
вообще, странно что гонка возникает. У меня Quere написан так чтобы 1 процесс мог писать, а второй читать с него, так что конкуренции за ресурс не должно бы возникать. Но сейчас покурю с синхронизацией.
источник

В

Виктор in pro.cxx
Спасибо
источник

IZ

Ilia Zviagin in pro.cxx
Виктор
вообще, странно что гонка возникает. У меня Quere написан так чтобы 1 процесс мог писать, а второй читать с него, так что конкуренции за ресурс не должно бы возникать. Но сейчас покурю с синхронизацией.
Ну у тебя половины кода нет, но вот любая переменная с g_ должна быть защищена мьютексом или быть атомиком.
источник

IZ

Ilia Zviagin in pro.cxx
Виктор
вообще, странно что гонка возникает. У меня Quere написан так чтобы 1 процесс мог писать, а второй читать с него, так что конкуренции за ресурс не должно бы возникать. Но сейчас покурю с синхронизацией.
Я точно не могу судить -- нет кода всего
источник

AD

Andrey Davydov in pro.cxx
Danya
Кажется человек в @supapro нашёл багу в clang. Я её сжал до MRE.
https://godbolt.org/z/E8xrMh
Что думаете?
При этом забавно, что в clang 8 работало ожидаемо, в 9-м кланге поехало неправильно
Лечится так:
class Inner : ::Base<float>

Но это всё равно кажется неправильным
Текущее поведение clang-а кажется логичным, ведь если убрать template argument list <float> (https://godbolt.org/z/Gff8Tr), то все компиляторы выдают accessibility error.
источник

D

Danya in pro.cxx
Andrey Davydov
Текущее поведение clang-а кажется логичным, ведь если убрать template argument list <float> (https://godbolt.org/z/Gff8Tr), то все компиляторы выдают accessibility error.
Так понятно, потому что Base без аргументов появился от наследования. А вот Base с аргументами по идее тоже внутри PrivateDerived тоже есть, и как бы логично.. но не знаю.
Где про это в стандарте можно почитать?
источник

D

Danya in pro.cxx
Какое поведение корректное то..
источник

D

Danya in pro.cxx
Если символа в публичном/протектном пространстве нет, логичным кажется искать вне класса тоже
источник

AD

Andrey Davydov in pro.cxx
Lookup не зависит от accessibility, если Base находится в базе, то и Base<float> тоже находится в базе.
источник

AD

Andrey Davydov in pro.cxx
Точнее в базе находится Base а потом туда подставляется float.
источник

D

Danya in pro.cxx
Andrey Davydov
Lookup не зависит от accessibility, если Base находится в базе, то и Base<float> тоже находится в базе.
Да, но видимо текущее поведение компиляторов работает примерно так, как я описал
источник
2021 February 12

AS

Anatoly Shirokov in pro.cxx
тема о сборке перенесена в @probuildsystems
источник

АК

Александр Караев... in pro.cxx
скорее всего https://t.me/pro_prog
источник