А какие изменения смущают?
там довольно нетривиально я сделал реализацию task_yield - вот она действительно мне пару рабочих дней плеш проедала:
основная задача была обеспечить чтобы каждый вызов task_yield последовательно перебирал все нитки в очереди шедулера не взирая на текущую и на ее приоритет.
я столкнулся с зависанием программы изза старого поведения - если нет более приоритетных ниток, то yield просто продолжает выполнять текущую нитку.
другой вариант зависания - иза того что вышедшая нитка ставилась в голову очереди, она при вызове yield выполнялась следующей, в результате yield просто попеременно выполняет 2 нитки первых в очереди.
соответственно если вы yieldите в цикле ожидания, для чего вобщемто и yield и нужен, вы получаете зависание всех остальных ниток на время ожидания этим yieldом.
для борьбы с этой бедой, я хитро выключаю из очереди шедулера нитку вышедшую yieldом, и восстанавливаю очередь при любом другом переключении задач. этот вариант еще не идеален, но он гораздо надежнее чем то что было.
вторник, 11 октября 2016 г., 8:24:39 UTC+3 пользователь Serge V. написал: