From 72caf0452b20596e28912427eee261a993f12756 Mon Sep 17 00:00:00 2001 From: Thayne McCombs Date: Mon, 15 Feb 2016 13:01:06 -0700 Subject: [PATCH 1/2] Add execute-task to execute task and discard return value This allows you to schedule a task without the overhead of needing to keep track of the return value. --- src/kernel/core.lisp | 8 ++++++++ src/kernel/package.lisp | 1 + test/kernel-test.lisp | 10 +++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/kernel/core.lisp b/src/kernel/core.lisp index 5836033..268a6b9 100644 --- a/src/kernel/core.lisp +++ b/src/kernel/core.lisp @@ -502,6 +502,14 @@ Calling `broadcast-task' from inside a worker is an error." (repeat worker-count (push-queue t to-workers)) (map-into (make-array worker-count) (lambda () (receive-result channel))))) +(defun execute-task (fn &rest args) + "Schedule a task to be run with the current value of `*kernel*'. + +The result of the function call is discarded." + (declare #.*normal-optimize*) + (submit-raw-task (make-task (task-lambda (apply fn args))) + *kernel*)) + (defun track-exit () (setf *lisp-exiting-p* t)) diff --git a/src/kernel/package.lisp b/src/kernel/package.lisp index 8f23fa8..71b5080 100644 --- a/src/kernel/package.lisp +++ b/src/kernel/package.lisp @@ -51,6 +51,7 @@ (:export #:make-channel #:submit-task #:broadcast-task + #:execute-task #:submit-timeout #:cancel-timeout #:receive-result diff --git a/test/kernel-test.lisp b/test/kernel-test.lisp index 5fd71a9..d43f3fc 100644 --- a/test/kernel-test.lisp +++ b/test/kernel-test.lisp @@ -697,7 +697,15 @@ (signals error (receive-result channel))) (signals error - (broadcast-task (lambda () (broadcast-task (lambda ()))))))) + (broadcast-task (lambda () (broadcast-task (lambda ()))))))) + +(full-test execute-task-test + (let ((queue (make-queue :fixed-capacity 1))) + (execute-task (lambda (v) + (sleep 0.5) + (push-queue v queue)) t) + (is (null (try-pop-queue queue :timeout 0))) + (is (try-pop-queue queue :timeout 1)))) (full-test worker-index-test (is (null (kernel-worker-index))) From 1cf919d95e17d73b37a4769873cd85ac4c6cd7ee Mon Sep 17 00:00:00 2001 From: Thayne McCombs Date: Sat, 27 Feb 2016 22:01:05 -0700 Subject: [PATCH 2/2] Rename execute-task to submit-bare-task --- src/kernel/core.lisp | 5 ++++- src/kernel/package.lisp | 3 ++- test/kernel-test.lisp | 8 ++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/kernel/core.lisp b/src/kernel/core.lisp index 268a6b9..1bc1304 100644 --- a/src/kernel/core.lisp +++ b/src/kernel/core.lisp @@ -502,7 +502,7 @@ Calling `broadcast-task' from inside a worker is an error." (repeat worker-count (push-queue t to-workers)) (map-into (make-array worker-count) (lambda () (receive-result channel))))) -(defun execute-task (fn &rest args) +(defun submit-bare-task (fn &rest args) "Schedule a task to be run with the current value of `*kernel*'. The result of the function call is discarded." @@ -510,6 +510,9 @@ The result of the function call is discarded." (submit-raw-task (make-task (task-lambda (apply fn args))) *kernel*)) +(defmacro bare-task (&body body) + `(submit-bare-task (lambda () ,@body))) + (defun track-exit () (setf *lisp-exiting-p* t)) diff --git a/src/kernel/package.lisp b/src/kernel/package.lisp index 71b5080..c96d123 100644 --- a/src/kernel/package.lisp +++ b/src/kernel/package.lisp @@ -51,7 +51,8 @@ (:export #:make-channel #:submit-task #:broadcast-task - #:execute-task + #:submit-bare-task + #:bare-task #:submit-timeout #:cancel-timeout #:receive-result diff --git a/test/kernel-test.lisp b/test/kernel-test.lisp index d43f3fc..f78a404 100644 --- a/test/kernel-test.lisp +++ b/test/kernel-test.lisp @@ -699,11 +699,11 @@ (signals error (broadcast-task (lambda () (broadcast-task (lambda ()))))))) -(full-test execute-task-test +(full-test bare-task-test (let ((queue (make-queue :fixed-capacity 1))) - (execute-task (lambda (v) - (sleep 0.5) - (push-queue v queue)) t) + (submit-bare-task (lambda (v) + (sleep 0.5) + (push-queue v queue)) t) (is (null (try-pop-queue queue :timeout 0))) (is (try-pop-queue queue :timeout 1))))