Как реализовать многопоточность в Common Lisp - PullRequest
8 голосов
/ 24 декабря 2011

Кажется, что уже есть несколько реализаций потоков, поскольку я заметил, что есть Бордо-потоки , Portable-Threads , и "Common Lisp Cook Book" также предоставляетчтобы реализовать многопоточность, пакет mp , который я не знаю, как включить его в свою программу, я не могу найти этот пакет.

Проблема в том, как выбрать подходящую многопоточную библиотеку для удовлетворения моих потребностей, так как я также программист на C, она лучше, чем pthread, но это не имеет значения, интересно, что этонаиболее используемая многопоточная библиотека, или каков обычный способ многопоточного программирования в Common Lisp.

Ответы [ 2 ]

7 голосов
/ 24 декабря 2011

Фактически, стандартом де-факто для Common Lisp является Bordeaux Threads (bt), который представляет собой слой переносимости через API-интерфейсы потоков различных реализаций.

mp (что означает многопроцессорность) - это как многопоточностьAPI вызывается в LispWorks (и, если я не ошибаюсь, Franz CL).Вы можете использовать его напрямую (точно так же, как sb-thread в SBCL), если вы разрабатываете для какой-то конкретной реализации, или вы можете положиться на bt, если вы стремитесь к переносимости во все активные в настоящее время реализации с поддержкой потоков (CLISP неэто вообще не так).

7 голосов
/ 24 декабря 2011

Согласно Статистика Quicklisp за ноябрь Бордо-потоки интенсивно используются, но я не вижу переносимых потоков или любые другие реализации. Итак, я думаю, вы могли бы попробовать это и посмотреть, если это соответствует вашим потребностям и ищите другую реализацию, если это не так.

Я едва использовал его, но нашел его простым в использовании и API документация довольно ясно.

...