ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
631552 Топик полностью
fk0, легенда (17.11.2015 12:22, просмотров: 668) ответил fk0 на Не нужно тянуть семафоры, мьютексы и т.п. из полноценной многозадачной ОС. Тебе нужен ровно один примитив -- "событие". Которое или произошло, или нет (бит). По нему и будить (у тебя ж собственно и сделана побудка по указателю на void*) Событие
Самое главное. Для построения чего-то наподобии libevent нужен какой-то аналог select или WaitForMultipleEvents: т.е. механизм ожидания множества событий. Иначе вся твоя супер-ос разваливается на несколько десятков биглупов, и каждый в своём цикле что-то проверяет и делает yield(). Ну или хотя бы event flags (как в ITRON). Идеально было бы иметь механизм подписки на события и callback'и вызываемые по факту их возникновения. А блокирующие функции, чего-то ожидающие, в такой системе не нужны, равно как и "потоки" или "задачи". По крайней мере в сравнении с кооперативной ОС. Для многопоточной тут слоножности возникают в виде блокировок на мьютексах. Как вариант -- пул потоков для обслуживания пула событий.
[ZX]