2013-12-09 2 views
6

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

Update

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

раздел 5.2 - "беззамочные Ring буфера в Linux *", это пример использования слова "беззамочные"

+1

Из содержимого этих статей - вы предполагаете, что есть разница? Я знаю только «lock-free», но не думал, что «заблокированный» описывает что-то другое (см. Также «неблокирование»). – JeffRSon

+1

Без ссылки на эти статьи, я думаю, мы просто догадываемся. Они могут означать одно и то же, или может быть какой-то тонкий нюанс, который они пытаются выделить, но я обычно предполагаю, что они являются синонимами. –

+0

@Damien_The_Unbeliever http://www.intel.com/content/dam/www/public/us/en/documents/guides/intel-dpdk-programmers-guide.pdf раздел 5.2 - «Lockless Ring Buffer в Linux *» Это пример использования слова «без блокировки». –

ответ

4

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

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

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

+0

Я до сих пор не знаю разницы между ними, но это лучший ответ. Так дайте вам монету. –

1

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

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

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

+0

https://en.wikipedia.org/wiki/Non-blocking_algorithm определяет безжизненную, свободную от блокировки и обструкцию, и да, эти требования гораздо более жесткие, чем просто не используемые традиционные блокировки. Например, см. Анализ (https://stackoverflow.com/questions/45907210/lock-free-progress-guarantees) заблокированной очереди, который очень эффективен при минимальном конфликте между потоками, но будет застревать, если поток засыпает просто неправильное время. –