В чем разница между без блокировки и без блокировки?

В некоторых статьях об алгоритме некоторые используют слово lockfreeи некоторые используют lockless, В чем разница между lockless а также lockfree? Спасибо!

Обновить

http://www.intel.com/content/dam/www/public/us/en/documents/guides/intel-dpdk-programmers-guide.pdf

раздел 5.2 - "Lockless Ring Buffer в Linux*", это пример использования слова "lockless"

2 ответа

Решение

Алгоритм не блокируется, если он удовлетворяет тому, что когда программные потоки выполняются достаточно долго, по крайней мере один из потоков выполняет прогресс (для некоторого разумного определения прогресса). Все алгоритмы ожидания без блокировок.

В общем, алгоритм без блокировки может выполняться в четыре этапа: выполнение собственной операции, помощь в операции препятствия, отмена операции препятствия и ожидание. Завершение собственной операции осложняется возможностью одновременной помощи и прерывания беременности, но это всегда самый быстрый путь к завершению. например, неблокирующие алгоритмы

Программирование без блокировок - это набор методов для безопасной работы с общими данными без использования блокировок. Существуют алгоритмы без блокировки для передачи сообщений, совместного использования списков и очередей данных и других задач. Программирование без блокировки довольно сложно. Например, все чисто функциональные структуры данных по своей природе не имеют блокировки, так как они неизменны

Без блокировки - более формальная вещь (ищите алгоритмы без блокировки). Суть этого для структур данных заключается в том, что если два потока / процесса получают доступ к структуре данных и один из них умирает, то другой гарантированно завершит операцию.

Lockless касается реализации - это означает, что алгоритм не использует блокировки (или использует более формальное имя - взаимное исключение).

Поэтому алгоритм без блокировок также не блокируется (потому что, если один поток блокируется, а затем умирает, другой будет ждать вечно), но не наоборот - существуют алгоритмы, которые не используют блокировки (например, они используют сравнения и замены)) но все равно может зависнуть, если другой процесс умирает. Упомянутый выше кольцевой буфер dpdk является примером без блокировки, которая не является свободной от блокировки.

Другие вопросы по тегам