Size: a a a

2020 July 13

AF

Aidar Fattakhov in pro.cxx
Anatoly Shirokov
Any return value from the function is ignored. If the function throws an exception, std::terminate is called. In order to pass return values or exceptions back to the calling thread, std::promise or std::async may be used. https://en.cppreference.com/w/cpp/thread/jthread/jthread
источник

AF

Aidar Fattakhov in pro.cxx
Anatoly Shirokov
Any return value from the function is ignored. If the function throws an exception, std::terminate is called. In order to pass return values or exceptions back to the calling thread, std::promise or std::async may be used. https://en.cppreference.com/w/cpp/thread/jthread/jthread
теперь нужен jasync с итерапшн поинтами
источник

AK

Alexey Kuznetsov in pro.cxx
Переслано от Alexey Kuznetsov
Раз уж зашла речь про неймспейсы и использование unqualified имен типов подскажите у кого какие лучшие практики с nested namespaces.
Несколько раз сталкивался с такой проблемой:
// foo.h
namespace my { class foo; }

// bar.h
#include "foo.h"
namespace my::internal
{
 void bar( foo& ); // << unqualified name. По задумке автора это my::foo
}

// internal/foo.h
namespace my::internal { class foo; }

// baz.cpp
#include "internal/foo.h"
#include "bar.h" // << а вот тут у нас odr-violation и my::internal::bar( foo& ) теперь принимает my::internal::foo

Все прекрасно компилируется, вы получаете разные лэйауты в разных юнитах трансляции для имени foo и просто какуюто кашу в памяти в рантайме, дебажится это плохо, потому что детектится проблема неочевидно, особенно на больших кодовых базах, довольно неприятные баги.
Что делать в таком случае? Всегда использовать полные имена со всеми неймспейсами даже если они в родительском неймспейсе? Это плохо контроллировать, для компилятора это валидно, а переносить поддержку этого на человека и код ревью не выглядит как что-то надежное.
Не использовать nested namespaces?
источник

YB

Yarique Belgorodsky in pro.cxx
@antoshkka userver в опенсорс когда заглянет?))
источник

ПК

Побитый Кирпич... in pro.cxx
Alexey Kuznetsov
Переслано от Alexey Kuznetsov
Раз уж зашла речь про неймспейсы и использование unqualified имен типов подскажите у кого какие лучшие практики с nested namespaces.
Несколько раз сталкивался с такой проблемой:
// foo.h
namespace my { class foo; }

// bar.h
#include "foo.h"
namespace my::internal
{
 void bar( foo& ); // << unqualified name. По задумке автора это my::foo
}

// internal/foo.h
namespace my::internal { class foo; }

// baz.cpp
#include "internal/foo.h"
#include "bar.h" // << а вот тут у нас odr-violation и my::internal::bar( foo& ) теперь принимает my::internal::foo

Все прекрасно компилируется, вы получаете разные лэйауты в разных юнитах трансляции для имени foo и просто какуюто кашу в памяти в рантайме, дебажится это плохо, потому что детектится проблема неочевидно, особенно на больших кодовых базах, довольно неприятные баги.
Что делать в таком случае? Всегда использовать полные имена со всеми неймспейсами даже если они в родительском неймспейсе? Это плохо контроллировать, для компилятора это валидно, а переносить поддержку этого на человека и код ревью не выглядит как что-то надежное.
Не использовать nested namespaces?
не писать в nested классы из родителя
источник

AK

Alexey Kuznetsov in pro.cxx
Сложно контроллировать такое, это могут сделать разные программисты из разных команд. Классы разные, просто так совпало что имена одинаковые, но fq-name разное, поэтому на уровне анализа никаких конфликтов нет
источник

AP

Antony Polukhin in pro.cxx
Yarique Belgorodsky
@antoshkka userver в опенсорс когда заглянет?))
мы работаем над этим
Процесс идёт, но очень медленно
источник

AM

Alexander Malkov in pro.cxx
Antony Polukhin
мы работаем над этим
Процесс идёт, но очень медленно
мы тут все очень ждем) и готовы помочь, если требуется..)
источник

AK

Alexander Kiselev in pro.cxx
Может ли поток разблокировать мьютекс, который заблокировал другой поток?
источник

AP

Antony Polukhin in pro.cxx
Alexander Kiselev
Может ли поток разблокировать мьютекс, который заблокировал другой поток?
нет, не делайте так
POSIX запрещает, C++ запрещает https://en.cppreference.com/w/cpp/thread/mutex/unlock
источник

SS

Sergey Sobolev in pro.cxx
Alexander Kiselev
Может ли поток разблокировать мьютекс, который заблокировал другой поток?
std::mutex::unlock The mutex must be locked by the current thread of execution, otherwise, the behavior is undefined.
источник

K

Konstantin in pro.cxx
Alexander Kiselev
Может ли поток разблокировать мьютекс, который заблокировал другой поток?
для этих целей используется condition_variable
источник

AT

Andrew Titov in pro.cxx
Konstantin
для этих целей используется condition_variable
Или семафор.
источник

AK

Alexander Kiselev in pro.cxx
Antony Polukhin
нет, не делайте так
POSIX запрещает, C++ запрещает https://en.cppreference.com/w/cpp/thread/mutex/unlock
тут дело не в теории, а что будет на практике?
источник

K

Konstantin in pro.cxx
на практике сразу свалится
источник

AT

Andrew Titov in pro.cxx
Alexander Kiselev
тут дело не в теории, а что будет на практике?
Это UB. На этом разговор окончен.
источник

AT

Andrew Titov in pro.cxx
Konstantin
на практике сразу свалится
К сожалению, нет.
источник

SS

Sergey Sobolev in pro.cxx
Alexander Kiselev
тут дело не в теории, а что будет на практике?
на практике может работать, но может свалиться в любой момент
источник

ПК

Побитый Кирпич... in pro.cxx
Alexander Kiselev
тут дело не в теории, а что будет на практике?
На практике можешь послать потоку сообщение чтоб он  сам закрыл мьютекс
источник

АВ

Александр Водянников... in pro.cxx
Побитый Кирпич
На практике можешь послать потоку сообщение чтоб он  сам закрыл мьютекс
По хорошему так и надо
источник