В чем разница между lockless и lockfree?

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

Обновить

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

раздел 5.2 -- "Без блокировки кольцевого буфера в Linux*", это пример использования слова "без блокировки"


person 大宝剑    schedule 09.12.2013    source источник
comment
Из содержания этих статей вы предполагаете, что есть разница? Я знаю только lock-free, но не думаю, что lockless описывает что-то другое (см. также неблокировку).   -  person JeffRSon    schedule 09.12.2013
comment
Без ссылки на эти статьи, я думаю, мы просто будем гадать. Они могут означать одно и то же, или может быть какой-то тонкий нюанс, который они пытаются подчеркнуть, но я обычно предполагаю, что это синонимы.   -  person Damien_The_Unbeliever    schedule 09.12.2013
comment
@Damien_The_Unbeliever intel.com/content/dam/www/public/us/en/documents/guides/ раздел 5.2 — Кольцевой буфер без блокировки в Linux* Это пример использования слова «без блокировки».   -  person 大宝剑    schedule 09.12.2013


Ответы (2)


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

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

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

person aryann    schedule 09.12.2013
comment
Я до сих пор не знаю разницы между ними, но это лучший текущий ответ. Так дайте вам монету. - person 大宝剑; 10.12.2013

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

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

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

person Uri Simchoni    schedule 27.11.2014
comment
en.wikipedia.org/wiki/Non-blocking_algorithm определяет бесплатно и без препятствий, и да, это гораздо более строгие требования, чем просто отказ от использования каких-либо традиционных замков. Например, см. анализ (stackoverflow.com/questions/45907210/) очереди без блокировки, которая очень эффективна с минимальной конкуренцией между потоками, но застрянет, если поток заснет в неподходящее время. - person Peter Cordes; 20.09.2017