Andrei
Понятно.
Andrei
Ну разве что иогу предложить полиси у атомиков поменять
Andrei
Если еще не сделали
Andrei
На load-consume
Andrei
У читающих тредов.
Andrei
Потому что указатели.
Andrei
Чтобы включить реордеринг обратно для независимых инструкций.
Andrei
У пишущих store release у читающих по указателям load-consume
Andrei
Вместо load-acquire
Square
спс, попробуем потрогать так
Square
так, погодь, между тредами кольцевой буфер, у которого офсеты лежат в атомиках. пишущий/читающий обращаются именно к ним
Square
при обращении говорить потоку как ему load делать?
Andrei
Буфер не весь из атомиков ведь правда?
Square
нет
Andrei
Только указатель на него атомик
Andrei
Да.
Square
а это в с11 есть?
Square
мне кажется только в 14м появилось
Andrei
В с++11
Andrei
Атомику пишешь
Square
хорошо, благодарю
Andrei
myatomicptr.store(rawptr, std:: memory_order_release) у читающего ptr = atomicdatasourceptr.load(std::memory_order_comsume)
Andrei
Еще в языке есть всякие штуки типа std::kill_dependency
Andrei
Можно вот на таком уровне все сделать и ручками memory fence поднимать.
Square
от души! я все никак не могу в memory order осилить :( остался в прошлом веке почти
Andrei
Да там легко. 40 минут есть? Посмотри лекцию. https://m.youtube.com/watch?v=_-3syPxgwqs
Square
Square
Лекция зачот!
Square
Я понял что нам ослабленный порядок вполне себе подходит
Square
Главное что обеспечивается атомарность изменений.
Square
Это по идее ещё больше добавит скорости. На миллионе элементов должно быть заметно
Andrei
Да.
🦥Alex Fails
ммм.... ослабенный порядок...
Andrei
Тебе не нужен sequential consistency
Andrei
только release-consume
Andrei
Потому как у тебя там указатели.
Square
Ох, вспоминаю я код 2009 года, ядро системы на делфи и все обвешано этими критическими секциями
Square
Причём в 2009 его с плюсов на на Паскаль переложили изза менеджера памяти
Square
Намучились мы за эти годы с паскакалем
🚀 Snyp
Ребят, чем черевато если оставаться на старой версии плюсов и не изучать новые 11 и 14 версии? Или это дело вкуса?
🦥Alex Fails
тем, что устареешь
Andrei
Чревато остаться без работы плюсера :D
Square
Square
И обрастанием мхом ;)
🚀 Snyp
Почитал вас тут, пишете что все новое в новых версиях не так легко дается когда привык к старому.
Square
Square
А потом когда ногу прострелил - читать хелп
Андрей
🚀 Snyp
Надо просто брать и юзать
Я тож так думаю, чувство продвинутости и упрощения в работе должны давать облегчение когда пишешь на новой версии лббимого языка.
Andrei
не совсем.
Andrei
Нужно знать старое, чтобы знать причины по которым есть нвое.
Andrei
тобы была логика эволюции языка
🚀 Snyp
Вот, поправьте лучше. Есть же позитивные стороны
Андрей
🚀 Snyp
Как то так, глупо конечно)
🦥Alex Fails
В программировании ты всегда вечный нуб
🦥Alex Fails
даже через 50 лет
🦥Alex Fails
потому что все движется вперед
Андрей
Кстати о новом. В c++14 есть auto return type. Зачем это надо?? Это же ужас!
Андрей
auto find_id(const std::vector<record> &people,
const std::string &name)
{
auto match_name = [&name](const record& r) -> bool {
return r.name == name;
};
auto ii = find_if(people.begin(), people.end(), match_name );
if (ii == people.end())
return -1;
else
return ii->id;
}
Андрей
У меня чувство, что люди хотят сделать так, чтобы для плюсов IDE вообще нельзя было написать.
Andrei
норм.
Андрей
Слушайте, вот чем return auto может помочь? Не многое сваливается на компилятор?
Andrei
Компилятор и так это делает.
Andrei
Когда выдаёт тебе return type mismatch
Andrei
Он всё равно вычисляет тип выражения в return-е
Andrei
и сравнивает его с сигнатурой
🚀 Snyp
У меня мысля такая. Продолжать писать на плюсах за компилем, если например 14 версии на нем нет то хотя бы просто знать об этом..чтобы когда будешь писать уже на новой версии то ты уже знал об этом
.вспомнил по быстрому и практикой закрепил. Идеально и не надо заморачиваться
🦥Alex Fails
тут как в "Алисе в Зазеркалье": надо все время бежать, чтобы оставаться на месте
🦥Alex Fails
🦥Alex Fails
или эмулировать фишки XD
🚀 Snyp
Ыы)
🦥Alex Fails
тут в соседней ветке было про static_assert
🦥Alex Fails
идеальная реализация в итоге через шаблоны
🦥Alex Fails
вернее, даже не так
🦥Alex Fails
template<size_t N>
Andrei
#define STATIC_ASSERT( x ) typedef int __STATIC_ASSERT__[( x )?1:-1]
🦥Alex Fails
блин