Constantine
я честно говоря не изучал
Constantine
но чета я уверен что мутекс первым делом сделает атомарную проверку
Aidar
Aidar
Если wait делает ось
Aidar
А невейт это один обмен со сравнением
Constantine
в случае lock-free ты пошел делать мусорные операции
в случае wait ты сказал "мне нужен вот этот ресурс"
Constantine
кажется, второе чуть более optimization friendly
Aidar
В случае wait ты начал ждать вместо мусорных операций но скорее всего переключишь контекс
Constantine
Мы не говорим о реализации wait
Aidar
Для невейт переключение контекста на многоядерной штуке врятли будет
Constantine
Constantine
Принципиально ты можешь вызвать nonnative_wait который будет перечитывать до посинения
Constantine
Собственно говоря ты это и делаешь
Aidar
Собственно внутри ты напишешь локфри?
Berkus
Berkus
она используется когда надо гарантировать взаимный прогресс многих продьюсеров или консьюмеров
Berkus
Berkus
Aidar
Ну локфри ещё и труднее контролировать осью, почти гарантировано жрется процессорное время ну и говернор соответственно увеличит частоту
Berkus
да это Константин опять страдает хуетой которую не понимает
Berkus
в большинстве случаев (100-102%) это так
Constantine
Почему? Это замечательное упражнение по программированию
Berkus
понятно что на всех человеческих системах мьютексы используют фаст лок и хэппи путь там стремительный как один атомик
Constantine
Constantine
Ну ладно, я уже придумал чудесный пример, зачем нужен lock free - привет, Real Time гарантия
Constantine
Ну собственно речь про RealTime гарантию
Constantine
Или как она называется там
Constantine
Грубо говоря гарантия, что метод будет исполнен в не более, чем _число_ тактов
Berkus
Berkus
Эрсултан
Вроде проходили что такое массив как заполнять и как выводить и т.п. но вот такое как записала училка... незнаю крч (
Эрсултан
Эрсултан, параллельные массивы — это такой антипаттерн программирования,
специально чтобы так не делать, придумали СТРУКТУРЫ, (они же мини-объекты)
Если проходили, то используй массив структур тут.
Berkus
Эрсултан
Berkus
и с чтением такая же фигня
Constantine
Эрсултан
А еще в @supapro
Я вступил вообще то чтобы учиться тут просматривая решение проблем других и сам развиваться...
Berkus
но еще раз - лок-фри не означает реал-тайм
Эрсултан
Спасибо огромное
Constantine
Constantine
Aleksander
🐙 Antony
нет, lock-free очереь в общем случае МЕНЕЕ производительна
+1. Правильно написанный код с мьютексами как правило производительнее чем lock-free подход. Это не только моё мнение, см CppCon2016, там один из докладчиков говорил что lock-free в большинстве тестов быстрее, потому что сравнивается с убогим решением на мьютексах (с динамической аллокацией в критической секции)
Aleksander
Constantine
Anton
все там defined, грохнется сразу )
Berkus
Berkus
Anton
в msvc и gcc точно
Constantine
Anton
деадлок на спинлоках вообще песня :)
Anton
зачастую только кнопка ресет спасает :)
Anton
программа грохнется если попытаться залочить один и тот же мьютек из одного и тогоже потока дважды
Berkus
только лайвлок лучше дедлока
Berkus
Anton
я понимаю что в стандарте UB, а на рабочих системах (linux и винда) это фактически креш
Anton
в данный момент времени
Berkus