From b8e9e253a69a53285af4f7936a42f661e375600c Mon Sep 17 00:00:00 2001 From: Arthur Carcano Date: Fri, 7 Jun 2024 10:35:15 +0200 Subject: [PATCH] Improve condvar signaling --- src/data_structures/synchronizer.ml | 2 +- src/data_structures/wq.ml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/data_structures/synchronizer.ml b/src/data_structures/synchronizer.ml index de19fb47b..39bd8dbbb 100644 --- a/src/data_structures/synchronizer.ml +++ b/src/data_structures/synchronizer.ml @@ -46,7 +46,7 @@ let make_pledge synchro = let end_pledge synchro = Mutex.lock synchro.mutex; synchro.pledges <- synchro.pledges - 1; - Condition.broadcast synchro.cond; + if Int.equal synchro.pledges 0 then Condition.broadcast synchro.cond; Mutex.unlock synchro.mutex let fail q = diff --git a/src/data_structures/wq.ml b/src/data_structures/wq.ml index 842ec824c..3548b5553 100644 --- a/src/data_structures/wq.ml +++ b/src/data_structures/wq.ml @@ -27,8 +27,7 @@ let fail = Synchronizer.fail let make () = let q = Queue.create () in let writter v condvar = - let was_empty = Queue.is_empty q in Queue.push v q; - if was_empty then Condition.broadcast condvar + Condition.signal condvar in Synchronizer.init (fun () -> Queue.take_opt q) writter