Добавление q к очереди sem_pending объекта sma. Это компактная реализация; она обычно выглядит примерно так:
q->prev = sma->last; if (sma->sem_pending) /* He пуст? */ sma->sem_pending_last->next = q; else sma->sem_pending = q; sma->sem_pending_last = q; q->next = NULL;
Истинным преимуществом реализации, применяемой в ядре, является то, что в ней удалось избежать потенциально дорогостоящего ветвления. Эта более эффективная реализация отчасти стало возможной благодаря тому, что переменная sem_pending_last стала указателем на указатель на узел очереди, а не просто указателем на узел очереди.