2015-01-29 4 views
1

예를 들어, 데이터베이스가 있고 클라이언트 코드가 래퍼 매크로를 통해 비교적 균일 한 방식으로 데이터베이스를 쿼리하면 쿼리가 순서대로 실행되도록 쿼리를 큐에 넣는 방법, 마지막 실행이 완료된 후 다음 실행함수 호출의 대기중인 실행을위한 가장 간단한 Common Lisp 관용구는 무엇입니까?

이것은 cl-mongo가 병렬 요청과 관련된 문제를 수정했는지 확인하기위한 신속한 임시 해결책입니다.

+0

처음에는 실제로 예제를 찾고 있었지만 sb-thread/sb-concurrency를 사용하여 끝 냈습니다. 이 페이지 http://mihai.bazon.net/blog/howto-multi-threaded-tcp-server-in-common-lisp은 날짜가 표시되었지만 작동하는 기능 세트를 구현하는 데 유용한 통찰력을 제공합니다. 또한 요청을 대기 행렬에 올리면 cl-mongo로 문제가 해결되었음을 알려드립니다. – minya

답변

2

엄밀히 말하면 Common Lisp 표준은 스레딩 기능을 지정하지 않으므로이 질문은 의미가 없습니다. 그러나 코드에서 스레드를 사용하는 경우 구현 독립적 인 대기열 모듈 . 기본 선택은 아마도 lparallel 일 것입니다. 구현에 의해 제공되는 일부 큐를 사용할 수도 있습니다 (많은 기능). 예를 들어, SBCL의 sb-concurrency:queue은 사용이 매우 간단하고 직관적입니다.

0

간단한 잠금 장치가 도움이 될 것 같습니다. bordeaux-threads:with-lock-held에 대한 간단한 사용 사례입니다.