Чесслово я хотел и пытался применить подход в достаточно большом проекте.
Не пошло, на ночь глядя уже не вспомню почему детально.
много копипасты кода тоже. размножение шаблонов.
остановился на компромиссе:
typedef яблоки int;
typedef груши int;
Увы. Идея «а давайте обернём примитивные типы» не работает.
Оно конечно можно пару тройку ключевых типов обернуть чем-то вроде:
#define BOOST_STRONG_TYPEDEF()
Но это не айс. Правильная эмуляция примитивного int к, примеру, не примитивная задача.
Класс это класс, даже если притворяется примитивным типом.
Как минимум, после компиляции, в релизе и отладке эти ухищрения лучше обратно заменить на нативные типы.
поддержка «сайта на с++» то еще «удовольствие». опыт имеется ;(.
И в 99% процентах случаях беcсмысленно, т.к. узкое место — база данных.
Хотя существует ниша для Wt.
Тоже работал удалённо. Отпишусь об ощущениях.
На первый взгляд вроде ничего. Жене можно по мелкому помочь. Домашние с пониманием относятся (папа работает). Ходить не надо на работу ( 40 минут пешком ).
Но потом выясняется:
1. Перерабатываешь.
Если с работы необходимо 18.00 уйти, и жена за этим проследит :). То дома вроде как гонять незачем, муж же тут. Как-то незаметно +1-2 часа сверху.
2. Не выходишь из дома.
Люди на работу утром уходят вечером приходят. Это худо-бедно физическая активность а если ещё и на велосипеде… А так получается что выходить из дома незачем и некогда. Тоска.
Неплохо бы было сразу указать ссылку на источник этого знания. Авторитетный кстати. До Саттера как-то нигде не было и намёка на возможность подобной коллизии.
Проблема использования в разных потоках
Строго говоря это не является проблемой shared_ptr. Это проблема потоконебезопасного использования объекта, тип объекта вторичен.
Но если очень хочется то можно ( из буста ):
template<class T> void atomic_store( shared_ptr<T> * p, shared_ptr<T> r )
{
boost::detail::spinlock_pool<2>::scoped_lock lock( p );
p->swap( r );
}
P.S. Именно этот пост побудил меня зарегистрироваться на Хабре, для этого комментария.
— да, дороговато. Но это не имеет почти никакого значения. Нужен только однократный тестовый прогон. Сложность графа получаемых зависимостей заранее, не зная проекта досконально, предсказать нельзя. Самописный граф тоже имеет право на существование.
— Мне кажется возможно Вы ввелись в заблуждение: Здесь не realtime ловля моментов deadlock, а поиск ситуаций которые могут к нему приводить.
это не минус — это приговор, для арифметических типов.
Не пошло, на ночь глядя уже не вспомню почему детально.
много копипасты кода тоже. размножение шаблонов.
остановился на компромиссе:
typedef яблоки int;
typedef груши int;
груши f = 1;
яблоки a= 2;
vector<груши> g;
Оно конечно можно пару тройку ключевых типов обернуть чем-то вроде:
#define BOOST_STRONG_TYPEDEF()
Но это не айс. Правильная эмуляция примитивного int к, примеру, не примитивная задача.
Класс это класс, даже если притворяется примитивным типом.
Как минимум, после компиляции, в релизе и отладке эти ухищрения лучше обратно заменить на нативные типы.
т.е. хотелось бы строгих типов но нету.
И в 99% процентах случаях беcсмысленно, т.к. узкое место — база данных.
Хотя существует ниша для Wt.
Серьёзно, 4 года крайне не эффективной работы и пришли в выводу что пора быть как все?
Или, всё-таки для красного рекламного словца?
Мы были кто в лес кто по дрова.
Но собрались в Офисе и достигли Просветления.
Писатель собственного ЯП должен ответить себе на вопросы:
Зачем?
А в чём уникальность\фишка велосипеда?
"… Из окошка вывалился стол
И пошел пошел пошел пошел..."
Предвидел однако.
На первый взгляд вроде ничего. Жене можно по мелкому помочь. Домашние с пониманием относятся (папа работает). Ходить не надо на работу ( 40 минут пешком ).
Но потом выясняется:
1. Перерабатываешь.
Если с работы необходимо 18.00 уйти, и жена за этим проследит :). То дома вроде как гонять незачем, муж же тут. Как-то незаметно +1-2 часа сверху.
2. Не выходишь из дома.
Люди на работу утром уходят вечером приходят. Это худо-бедно физическая активность а если ещё и на велосипеде… А так получается что выходить из дома незачем и некогда. Тоска.
А если-бы реальность распорядилась по иному (печальный итог)
Перераспределились ли бы плюса\минуса для «пессимиста»\«оптимиста»?
Я конечно имею ввиду тренинговый вариант.
Неплохо бы было сразу указать ссылку на источник этого знания. Авторитетный кстати. До Саттера как-то нигде не было и намёка на возможность подобной коллизии.
Строго говоря это не является проблемой shared_ptr. Это проблема потоконебезопасного использования объекта, тип объекта вторичен.
Но если очень хочется то можно ( из буста ):
P.S. Именно этот пост побудил меня зарегистрироваться на Хабре, для этого комментария.
Перефразируя: каждый проблемный код несчастен по своему.
Инвидуальный подход никто не отменял.
— Мне кажется возможно Вы ввелись в заблуждение: Здесь не realtime ловля моментов deadlock, а поиск ситуаций которые могут к нему приводить.