Якщо у вас є черга декількох виробників / одного споживача / FIFO, ви можете легко створити один LockFree, використовуючи SLIST або тривіальний Lock Free LIFO стек. Те, що ви робите, - це створити другий «приватний» стек для споживача (який також можна зробити як СПИСОК для простоти або будь-яку іншу вибрану вами модель стека). Споживач викидає речі з приватного стеку. Кожного разу, коли приватний LIFO вичерпується, ви робите флеш, а не вискакуєте спільний паралельний SLIST (захоплюючи весь ланцюжок SLIST), а потім проходите список Flushed у порядку, висуваючи елементи на приватний стек.
Це працює для одного виробника / одного споживача та для декількох виробників / одного споживача.
Однак це не працює для випадків із кількома споживачами (як з одним виробником, так і з декількома виробниками).
Окрім того, що стосується хеш-таблиць, вони є ідеальним кандидатом для «розмежування», яке просто поділяє хеш на сегменти, що мають блокування на сегменти кешу. Ось як це робить паралельна бібліотека Java (використовуючи 32 смуги). Якщо у вас є легкий замок зчитувача-записувача, до хеш-таблиці можна отримати одночасний доступ для одночасного читання, і ви зупинитесь лише тоді, коли запис відбувається на спірних смугах (і, можливо, якщо ви дозволяєте нарощувати хеш-таблицю).
Якщо ви прокручуєте свої власні, переконайтеся, що ви переплетете свої замки за допомогою хеш-записів, а не покладете всі свої замки в масив поруч один з одним, щоб ви мали менше шансів на обмін помилками.