модуль Devel функция "Theme developer" удобна для наблюдения, какие шаблонные файлы Drupal ищет, когда это переходит к теме что-то. См. снимок экрана на той странице для примера.
Вы, вероятно, могли бы реализовать очередь ограниченного размера с наименьшими трудностями ... Я думал об этом недавно и придумал этот дизайн, но вы, вероятно, можете найти много других интересных идей: (ПРЕДУПРЕЖДЕНИЕ : могут возникнуть проблемы!)
head
== tail
, нет элементов поставить в очередь (ptr)
, Interlocked-Swap tail
с NULL ( prev_tail
- значение подкачки)
prev_tail == NULL
, попробуйте еще раз prev_tail + 1
(с переносом) == head
, ваша очередь заполнена ptr
в * prev_tail
и назначьте prev_tail + 1
на tail
(следите за переносом буфера) dequeue ()
сделайте копию tmp_head = head и проверьте tmp_head == tail
* tmp_head
как ptr
head
с tmp_head
поменять местами head
на head + 1
ptr
Вы можете ждать как головные, так и конечные операции CAS, но если очередь не оспаривается, вы должны добиться успеха с первого раза, без лишних блокировок.
Очереди неограниченного размера «немного» сложнее;) Но вы сможете создать достаточно большую очередь для большинства нужд.
Думаю, есть интересное обсуждение этой темы здесь , особенно в этой ветке.
У этих ребят есть, может, вы найдете там вдохновение. Другие интересные файлы - это yqueue.hpp и atomic_ptr.hpp
Решение Viraptor блокируется, нет нескольких производителей / множественных потребительских бессоленых очередь алготих, я знаю.
Возможно, вам стоит взглянуть на реализацию Herb Sutters очереди с низкой блокировкой.
http://www.drdobbs.com/hpc-high-performance-computing/211601363
Он действительно использует атомарность c ++ 0x, но это будет (должно быть) легко реализовать с вашей конкретной архитектурой атомарной ops (__sync_ * с использованием GNU, atomic_ * в Solaris и т. д.).