ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 ноября
828058 Топик полностью
SciFi (29.03.2018 11:08, просмотров: 202) ответил Dingo на Тогда уж связанный список. Или, чтобы с не дёргать malloc/free - массив структур, в которых есть необходимая инфа ( номер следующей структуры, приоритет, ...). Поэтому и была мысль про указатель на функцию. Или же вами предложенные ФИФО в
Вот: #define FIFO_SZ 16 struct fifo_element { int task; int prio; }; static struct fifo_element fifo[FIFO_SZ]; static unsigned int head, tail; static bool busy; void lock_request(int task, int prio) { // place request on queue struct fifo_element* dst = &fifo[head++ & (FIFO_SZ - 1)]; dst->task = task; dst->prio = prio; } bool lock_granted(int task) { if (!busy) { // scan the queue struct fifo_element* max = 0; for (unsigned int i = tail; i != head; i++) { struct fifo_element* elem = &fifo[i & (FIFO_SZ - 1)]; if (elem->task == task && (max == 0 || elem->prio > max->prio)) { max = elem; } } if (max) { // found it if (max == &fifo[tail & (FIFO_SZ - 1)]) { // last in queue, move tail pointer tail++ } else { // erase queue element max->task = -1; } busy = true; } return busy; } else { return false; } } void lock_release(void) { busy = false; }
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้