Size: a a a

2020 June 07

AF

Aidar Fattakhov in pro.cxx
кто тебе сказал про последнее утверждение?
источник

AF

Aidar Fattakhov in pro.cxx
Aidar Fattakhov
кто тебе сказал про последнее утверждение?
про то что нужна каждлму своя
источник

R

Ruben in pro.cxx
у тех реализаций очереди что я видел, одно начало и один конец
источник

R

Ruben in pro.cxx
а тут одна голова куда пишет производитель, и несколько хвостов, откуда читают потребители
источник

R

Ruben in pro.cxx
Aidar Fattakhov
про то что нужна каждлму своя
а есть вариант с общей памятью, чтобы не создавался буфер с сообщениями на каждого потребителя в отдельности?
источник

R

Ruben in pro.cxx
что произойдет с очередью, если кто-то не успел прочитать сообщения?
источник

R

Ruben in pro.cxx
здесь для правильной работы сразу ряд жестких требований
источник

VO

Vyacheslav Olkhovche... in pro.cxx
Ruben
что-то не пойму, как это работает.
static void rwticket_wrlock(rwticket *l)
{
 unsigned me = atomic_xadd(&l->u, (1<<16));
 unsigned char val = me >> 16;
 
 while (val != l->s.write) cpu_relax();
}

Сначала мы увеличиваем l->s.write с помощью атомарной функции atomic_xadd (побитовыми операциями добиваемся увеличения поля write). Результат увеличения сохраняем в me и получаем далее в val значение того самого write после атомарного инкретемента.
Далее в цикле ожидаем, пока val не станет равно текущему значению l->s.write.
Этот штука ничего не лочит, так как при любом исходном значении l->s.write условие в цикле не выполняется и мы покидаем lock()
нет, в me сохраняем не результат а предыдущее значение.
источник

R

Ruben in pro.cxx
Vyacheslav Olkhovchenkov
нет, в me сохраняем не результат а предыдущее значение.
тогда опять не понимаю. Вызов lock блокирует сам себя?
источник

VO

Vyacheslav Olkhovche... in pro.cxx
Ruben
я так понял, вызывает переключение контекста, либо дает поработать гипертредингу на короткое время
переключения контекста тут не предусмотренно, говрю же -- тут по сути спинлоки
источник

VO

Vyacheslav Olkhovche... in pro.cxx
Ruben
тогда опять не понимаю. Вызов lock блокирует сам себя?
предполагается что остальная работа идет в других тредах на других ядрах и пока ты тут в цикле пару раз прокрутишься -- с другого ядра лок отпустят и ты побежишь дальше
источник

R

Ruben in pro.cxx
мьютекс порверил, pthread_rwlock_t с атрибутом PTHREAD_PROCESS_SHARED прекрасно работает между процессами
источник

R

Ruben in pro.cxx
Понял серьезную проблему с кросспроцессным мьютексом. Если процесс залочет и упадет, то все зависнет.
источник

W

Wild_Wind in pro.cxx
Ruben
Понял серьезную проблему с кросспроцессным мьютексом. Если процесс залочет и упадет, то все зависнет.
А WatchDog разве не рестартнет?
Или его нет?
источник

SK

Stas Koynov in pro.cxx
Ruben
Понял серьезную проблему с кросспроцессным мьютексом. Если процесс залочет и упадет, то все зависнет.
ты пишешь считай что драйвер. ты не должен косячить!
источник

R

Ruben in pro.cxx
Wild_Wind
А WatchDog разве не рестартнет?
Или его нет?
ну вотчдог это уже последняя инстанция
источник

R

Ruben in pro.cxx
если он сработал, то где-то сильно накосячили
источник

R

Ruben in pro.cxx
полный ребут всего девайса
источник

W

Wild_Wind in pro.cxx
Ruben
ну вотчдог это уже последняя инстанция
Да, но у тебя же rtos или аналог?
Там вроде обычно шедуллер есть, и мониторы за тредами (у нас были).
источник

R

Ruben in pro.cxx
у меня linux
источник