Size: a a a

2021 March 17

SH

Serhii Herashchenko in pro.cxx
Denis Paukaev
Рассчитывать на то что компилятор сгенерирует довольно наивно ) проще использовать std::function только там, где без него не обойтись (type erase?), а вместо бинд есть лямбды, ну и те 2 кейса в год, когда нужен бинд (уже даже не помню какие)
бо таких кейсов нет
источник

D

Dmitriy in pro.cxx
Denis Paukaev
Рассчитывать на то что компилятор сгенерирует довольно наивно ) проще использовать std::function только там, где без него не обойтись (type erase?), а вместо бинд есть лямбды, ну и те 2 кейса в год, когда нужен бинд (уже даже не помню какие)
asio как минимум
источник

AK

Alexander Kiselev in pro.cxx
подскажите, есть телеграмм чат на тематику conan C/C++ package manager ?
(или подскажите как отлаживать{запускать в отладчике} рецепты конан)
источник

IL

Ignat Loskutov in pro.cxx
источник

m

magras in pro.cxx
Denis Paukaev
Рассчитывать на то что компилятор сгенерирует довольно наивно ) проще использовать std::function только там, где без него не обойтись (type erase?), а вместо бинд есть лямбды, ну и те 2 кейса в год, когда нужен бинд (уже даже не помню какие)
bind не нужен, но иногда его синтаксис удобнее и компактнее чем лямбды. В прочем для простых случае теперь есть bind_front.
источник

S

SupaproBot in pro.cxx
Переслано от AlexWhite
Ребят, помогите пожалуйста. Второй день уже сижу и думаю в чем проблема. Одна одинаковая либа для запросов к серверу и два проекта.
Один проект сделан на imgui(С граф. интерфейсом) и все работает прекрасно. Второе приложение это просто консоль, где такие же запросы один в один, что и в первом приложение.
Только в первом работает все, а консоль на те же запросы выдает 400 плохой запрос
источник

IZ

Ilia Zviagin in pro.cxx
Переслано от Ilia Zviagin
И что ты от нас хочешь?
400 - это даже нет программной ошибки, это значит, ты шлёшь какой-то не тот запрос
источник
2021 March 18

D

Dmitriy in pro.cxx
Вопрос по lockfree-очереди. Реализовал её по алгоритму Майкла-Скотта + с оглядкой на бустовскую и примеры в интернете.
Как и полагается, спустя месяц пришли к выводу, что время от времени падает именно она.

Как дебажить?
Санитайзеров на платформе нет, имеющиеся средства анализа не вылавливают ошибку, однако удалось создать +- повторяемые условия её проявления.
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
Вопрос по lockfree-очереди. Реализовал её по алгоритму Майкла-Скотта + с оглядкой на бустовскую и примеры в интернете.
Как и полагается, спустя месяц пришли к выводу, что время от времени падает именно она.

Как дебажить?
Санитайзеров на платформе нет, имеющиеся средства анализа не вылавливают ошибку, однако удалось создать +- повторяемые условия её проявления.
А вы ошибку уверенно локализовали? Тестик сделали там на hardware_max потоков, которые пытаются её перегружать?
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
А вы ошибку уверенно локализовали? Тестик сделали там на hardware_max потоков, которые пытаются её перегружать?
Можно считать, что да. При > 32 потоков падает в 1 из 100 циклов теста практически гарантированно
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
Можно считать, что да. При > 32 потоков падает в 1 из 100 циклов теста практически гарантированно
А исходный код не можете показать?
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
Вопрос по lockfree-очереди. Реализовал её по алгоритму Майкла-Скотта + с оглядкой на бустовскую и примеры в интернете.
Как и полагается, спустя месяц пришли к выводу, что время от времени падает именно она.

Как дебажить?
Санитайзеров на платформе нет, имеющиеся средства анализа не вылавливают ошибку, однако удалось создать +- повторяемые условия её проявления.
Вообще, я бы при хорошей плотности воспроизведения делал примерно так:
0. Поднять все барьеры до seq_cst.
Ошибка сохраняется?
Да. Добавить целенаправленную ошибку в каждую редкую ветку и сопоставить статистику ошибок.
Нет. Понятно, в чём проблема.
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
А исходный код не можете показать?
Да. Но круг поиска может быть шире, чем кажется :)
https://github.com/DymOK93/KTL/blob/lockfree_queue_fix/modules/lockfree/queue.hpp
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
Вообще, я бы при хорошей плотности воспроизведения делал примерно так:
0. Поднять все барьеры до seq_cst.
Ошибка сохраняется?
Да. Добавить целенаправленную ошибку в каждую редкую ветку и сопоставить статистику ошибок.
Нет. Понятно, в чём проблема.
Проверил с seq_cst (в моей реализации для x86-64 - на основе MSVC-интринсиков _InterlockedExchange() для store(), _InterlockedCompareExchange для load())
Ошибка сохранилась. Спасибо - буду проверять отдельные ветви исполнения...
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
Проверил с seq_cst (в моей реализации для x86-64 - на основе MSVC-интринсиков _InterlockedExchange() для store(), _InterlockedCompareExchange для load())
Ошибка сохранилась. Спасибо - буду проверять отдельные ветви исполнения...
https://github.com/DymOK93/KTL/blob/lockfree_queue_fix/modules/lockfree/queue.hpp#L122
начните с вот этой, тут, кажется, что-то очень странное написано
источник

CD

Constantine Drozdov in pro.cxx
хотя, может, у меня паранойя
источник

D

Dmitriy in pro.cxx
Хм, вроде не странное... Но перепроверю
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
Хм, вроде не странное... Но перепроверю
ладно, вот это-то точно повод для паранойи
https://github.com/DymOK93/KTL/blob/lockfree_queue_fix/modules/lockfree/queue.hpp#L154
мы не захватили владение узлом, почему во время этого присваивания rhs не умер?
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
ладно, вот это-то точно повод для паранойи
https://github.com/DymOK93/KTL/blob/lockfree_queue_fix/modules/lockfree/queue.hpp#L154
мы не захватили владение узлом, почему во время этого присваивания rhs не умер?
1) head == current_head => "голова" на месте
2) !(head==tail) => очередь не пуста
3) value = next_ptr->value => считали значение
4) cas_weak_helper(m_head.get_ptr(), head, new_head) => если true, то голова все еще наша, считанное значение валидно

Если предположить, что между 2) и 4) другой поток прошел тот же путь и "снял голову", то вопрос лишь в том, кто раньше придет в 4)
Так это вижу я... И не видел иного рассмотрения в источниках
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
1) head == current_head => "голова" на месте
2) !(head==tail) => очередь не пуста
3) value = next_ptr->value => считали значение
4) cas_weak_helper(m_head.get_ptr(), head, new_head) => если true, то голова все еще наша, считанное значение валидно

Если предположить, что между 2) и 4) другой поток прошел тот же путь и "снял голову", то вопрос лишь в том, кто раньше придет в 4)
Так это вижу я... И не видел иного рассмотрения в источниках
ну вопрос что поток (А) выполняет это присваивание, а два соседа просто съели элемент и вызвали его деаллокацию
источник