sp1_core_machine/utils/
concurrency.rs1use std::sync::{Condvar, Mutex};
2
3pub struct TurnBasedSync {
5 pub current_turn: Mutex<usize>,
6 pub cv: Condvar,
7}
8
9impl TurnBasedSync {
10 pub fn new() -> Self {
12 TurnBasedSync { current_turn: Mutex::new(0), cv: Condvar::new() }
13 }
14
15 pub fn wait_for_turn(&self, my_turn: usize) {
17 let mut turn = self.current_turn.lock().unwrap();
18 while *turn != my_turn {
19 turn = self.cv.wait(turn).unwrap();
20 }
21 }
22
23 pub fn advance_turn(&self) {
25 let mut turn = self.current_turn.lock().unwrap();
26 *turn += 1;
27 self.cv.notify_all();
28 }
29}