Size: a a a

2021 July 15

AB

Aleksei Budyakov in supapro.cxx
А зачем лочить то что уже залочено?
Или я чего-то не понимаю..
источник

NK

Nikolay Kononov in supapro.cxx
ну есть две тред сейф функции они лочат в начале, анлочат в конце и вдруг тебе понадобилось из одной функции вызвать другую
источник

NK

Nikolay Kononov in supapro.cxx
или как более тупой вариант в рекурсию уйти (что по сути одно и то же)
источник

AB

Aleksei Budyakov in supapro.cxx
Спасибо. Кажется я понял
источник

IZ

Ilia Zviagin in supapro.cxx
Ты можешь в данном коде не знать, залочен ли уже данный мьютекс.
Например, функция используется для непосредственного вызова клиентом, и должна блокировать,
а также может вызываться из более крупной функции для выполнения того же действия над множеством элементов.
Типа DeletePerson / DeleteAllPersons
источник

FS

Flower Surgeon in supapro.cxx
ВНЕЗАПНО, если у тебя функция зовёт сама себя. На то он и рекурсивный.
источник

AS

Anatoly Shirokov in supapro.cxx
если бы у тебя не было рекурсивных мьютексов, то у тебя часть интерфейса была бы публичной, для клиента, а часть скрытой, неблокирующей, чтобы обеспечить перевызов одно функции из другой:
class foo {
   std::mutex m;
public:
   void blocking1() {
          std::lock_guard<std::mutex> g(m);
          do_blocking1();
   }
   void blocking2() {
          std::lock_guard<std::mutex> g(m);
          do_blocking2();
   }
private:
  void do_blocking1() {
       do_blocking2();
  }
  void do_blocking2() {...}
};
источник

NK

Nikolay Kononov in supapro.cxx
ну делать приватные ансейф методы кажется даже лучше
источник

AS

Anatoly Shirokov in supapro.cxx
я соглашусь
источник

AB

Aleksei Budyakov in supapro.cxx
То есть можно создать не блокирующую функцию которая комбинирует вызовы блокирующих, либо сделать блокирующую которая вызывает другую блокирующую но тогда используется рекурсивный мютекс. (В обоих случаях блокировка по одному мютексу)
источник

AS

Anatoly Shirokov in supapro.cxx
да
источник

AB

Aleksei Budyakov in supapro.cxx
Спасибо. Понял. Занятная штука.
источник

с

смкх in supapro.cxx
Такой вопрос.
Есть функция, в которую передаются границы целочисленного диапазона.
Возможно ли (и, если возможно, куда копать) вывести "общий" тип (под общим типом я понимаю такой тип, у которого область значений гарантированно вмещает обе границы) и инстанцировать мой шаблон этим типом, а если это невозможно (один тип знаковый, а второй нет, например) кинуть ошибку компиляции.
Т. е. идейно что-то такое (код не рабочи
й):

template<typename L, typename R>
my_class create_my_class_instance(L left, R right)
{
   if(std::numeric_limits<L>::max() > std::numeric_limits<R>::max())
   {
       return my_class<L>(left, static_cast<L>(right));
   }
   else
   {
       return my_class<R>(static_cast<R>(left), right);
 
 }
}

Если передали usigned int a, usigned long b, то инстанцировать unsigned long'ом, если передали int и long - long'ом.
источник

с

смкх in supapro.cxx
теоретически можно знаковые сразу до unsigned long long расширить, а беззнаковые - до size_t, но вопрос можно ли именно через тип аргументов выводить
источник

АК

Александр Караев... in supapro.cxx
std::common_type_t<L, R> скорее всего поможет
источник

K

Kelbon in supapro.cxx
хех, по моему можно сделать decltype( true ? first_value : second_value) что даст общий тип для каких то чиселок))) Ну это такое, по приколу
источник

d

disba1ancer in supapro.cxx
Зачем size_t?
источник

AF

Aidar Fattakhov in supapro.cxx
uintmax_t
источник

VK

Vitaliy ◀️TriΔng3l▶️... in supapro.cxx
До size_t можно и сузить, например, на 32-битной системе :)
источник

с

смкх in supapro.cxx
так стоп, size_t же тип, который самое большое беззнаковое значение вмещает, нет?
источник