Für ein Mehr Hersteller/Single-Consumer-Queue/FIFO, Sie leicht ein LockFree machen mit SLIST oder einem trivialen Lock Free LIFO Stack. Was Sie tun, ist ein zweiter "privater" Stack für den Konsumenten (der auch als SLIST zur Vereinfachung oder für jedes andere von Ihnen gewählte Stack-Modell verwendet werden kann) Privater Stapel: Immer wenn das private LIFO ausgeatmet wird, führt man einen Flush aus, anstatt das gemeinsame gleichzeitige SLIST abzubrechen (die gesamte SLIST-Kette zu greifen) und dann die Flushed-Liste zu durchlaufen, um Elemente auf den privaten Stapel zu schieben
Das funktioniert für Single-Producer/Single-Consumer und für Multiple-Producer/Single-Consumer.
Es funktioniert jedoch nicht für Multiple-Producer/Multiple-Consumer-Fälle.
Eine sehr interessante Antwort in Bezug auf Performance-Tuning mit Lock-Free-Algorithmen und Alternativen: http://stackoverflow.com/questions/853316/is-critical-section-always-faster/853510#853510. – mghie