Skip to content

Commit d21fe3a

Browse files
committed
round-robin scheduling
1 parent 6c48557 commit d21fe3a

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/tracedAtomic.ml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,14 +314,21 @@ let mark_backtrack proc time state (last_read, last_write) =
314314
let map_diff_set map set =
315315
IdMap.filter (fun key _ -> not (IdSet.mem key set)) map
316316

317+
let round_robin previous =
318+
let id = previous.run.proc_id in
319+
match IdSet.find_first_opt (fun j -> j > id) previous.enabled with
320+
| None -> IdSet.min_elt_opt previous.enabled
321+
| found -> found
322+
317323
let rec explore func time state (explored, state_planned) current_schedule clock (last_read, last_write) =
318324
let s = List.hd state in
319325
assert (IdMap.is_empty s.backtrack) ;
320326
let dones = ref IdSet.empty in
321327
begin match state_planned with
322328
| [] ->
323-
if IdSet.cardinal s.enabled > 0 then begin
324-
let p = IdSet.min_elt s.enabled in
329+
begin match round_robin s with
330+
| None -> assert (IdSet.is_empty s.enabled)
331+
| Some p ->
325332
let init_step = IdMap.find p s.procs in
326333
s.backtrack <- IdMap.singleton p [init_step] ;
327334
end

0 commit comments

Comments
 (0)