Не, твоето не е preemtive a cooperative:-)
За preemptive ти трябват поне 2 неща:
1) Критерий по който динамично да решаваш дали да има preemption или да няма.
2) Възможност да направиш превключване без да искаш съгласие от нишката, която губи контрол.
Пример - имаш нишка, която трябва да изчака таймоут или някаква периферия. Тук нишката доброволно се отказва от CPU-то - няма проблем. Проблемът е, че след като изтече таймоута или периферията е готова (IRQ) трябва да събудиш нишката и да решиш дали да й подадеш управлението (веднага) или само да я сложиш в списъка с искащи управление. Ти нямаш нито приоритет нито друг механизъм по който да решиш (динамично) дали ще й дадеш управление. Но дори и да имаше (1) нямаш второто условие, т.е. дори и да искаш да я събудиш не можеш, защото в момента ти се изпълнява някаква друга нишка, която си ползва всички регистри. А ти няма как да спасиш всички регистри, щото на мястото на R2 пишеш CPSR.
Просто не става... в най-добрия случай можеш само да добавиш нишката в списъка на готовите, но не можеш да й подадеш контрола *веднага*. Тя ще получи управление едва когато текущата направи yeld. Затова този подход се нарича cooperative а не preemptive
