Lparallel.queue 线程安全?

Lparallel.queue thread-safe?

我可能没有在正确的位置寻找 documentation of lparallel.queue,但是我们可以假设这些队列是线程安全的并且队列自己处理任何 locking/unlocking,所以队列的用户不必明确执行任何 locking/unlocking?如果这被记录在某处,我将不胜感激 link.

查看源代码,队列似乎被锁定了。

(define-queue-fn push-queue (object queue)
  push-cons-queue
  push-vector-queue)

...

(define-locking-fn push-cons-queue (object queue) (t cons-queue) (values) lock
  (with-cons-queue-slots (impl cvar) queue
    (push-raw-queue object impl)
    (when cvar
      (condition-notify cvar)))
  (values))

解锁的函数有一个单独的名称:

(define-queue-fn push-queue/no-lock (object queue)
  push-cons-queue/no-lock
  push-vector-queue/no-lock)

不知道在哪里指定的,但是看代码发现队列函数确实是线程安全的。

队列函数全部扩展为对 DEFINE-LOCKING-FN 的调用,后者又扩展为 DEFINE-LOCKING-FN/BASE,从而导致 DEFUN 函数的内容包含在 [=13] 中=].