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] 中=].
我可能没有在正确的位置寻找 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] 中=].