-
- В типичной ОС с семафором связан список ожидания, в который
становятся процессы ожидающие срабатывания данного семафора. И
будится один из процессов, первый в очереди. А у тебя -- spinlock,
совсем другая история. И да, там бы с атомарностью что-то
придумать: обычно достаточно примитива test and set (атомарного
инкремента, compare and swap...) Без атомарности не взлетит, т.к.
условие "!busy" может сработать сразу в двух потоках одновременно и
будет глюкодром. Нужна атомарная fk0легенда(871 знак., 10.06.2020 10:47)
- достаточно запретить прерывания на время обращения к переменной. В
ИАРе для этого есть куча архитектурно-независимых интринсиков. - LightElf(11.06.2020 13:02)
- +1. Работало еще на 8080. - VLLV(11.06.2020 13:42)
- Что-то ARM объявил LDREX/STREX внезапно :) как: Chum_A(340 знак., 10.06.2020 13:55, ссылка, ссылка)
- Компилятор оказался умнее погромиздов. Погромизды сказали "это не баг, а фича" и нечего тут. - LightElf(10.06.2020 14:35)
- достаточно запретить прерывания на время обращения к переменной. В
ИАРе для этого есть куча архитектурно-независимых интринсиков. - LightElf(11.06.2020 13:02)
- Такой велосипед не поедет. BlackMordaмудак(68 знак., 09.06.2020 22:56)
- Ждать в прерывании НЕЛЬЗЯ. По определению. В него нужно быстро
войти, быстро что-то сделать и быстро свалить. Про энтропию даже не
начинайте. - Xитpый Kитaeц(11.06.2020 09:58)
- А проверить в прерывании на не занятось ресурса как? - BlackMordaмудак(11.06.2020 11:23)
- Если прерывание не может прерываться -- достаточно
переменной-флага. Если может -- нужна атомарная переменная с
функционалом test-and-set. - fk0легенда(11.06.2020 11:28)
- "атомарная переменная с функционалом test-and-set." - это не мютекс? - BlackMordaмудак(11.06.2020 15:13)
- Если прерывание не может прерываться -- достаточно
переменной-флага. Если может -- нужна атомарная переменная с
функционалом test-and-set. - fk0легенда(11.06.2020 11:28)
- А проверить в прерывании на не занятось ресурса как? - BlackMordaмудак(11.06.2020 11:23)
- Ждать можно и не в прерывании. Samx(95 знак., 10.06.2020 01:26)
- Заводить еще переменную которая будет опрашиватся в основном цикле? Энтропия вырастет. - BlackMordaмудак(10.06.2020 10:39)
- Использовать мутексы в прерывании - весьма богатая идея. Сами придумали? - LightElf(09.06.2020 23:06)
- Не знаю, как у вас, а у меня всё работает. Main loop, protothreads, вот это всё. Прерывания там, где без них никак. Переключалка задач не нужна. - SciFi(09.06.2020 23:00)
- Ждать в прерывании НЕЛЬЗЯ. По определению. В него нужно быстро
войти, быстро что-то сделать и быстро свалить. Про энтропию даже не
начинайте. - Xитpый Kитaeц(11.06.2020 09:58)
- В типичной ОС с семафором связан список ожидания, в который
становятся процессы ожидающие срабатывания данного семафора. И
будится один из процессов, первый в очереди. А у тебя -- spinlock,
совсем другая история. И да, там бы с атомарностью что-то
придумать: обычно достаточно примитива test and set (атомарного
инкремента, compare and swap...) Без атомарности не взлетит, т.к.
условие "!busy" может сработать сразу в двух потоках одновременно и
будет глюкодром. Нужна атомарная fk0легенда(871 знак., 10.06.2020 10:47)