88 template <
typename Predicate>
90 : config_(cfg), stop_(
false), worker_([
this, pred]() { run_loop(pred); })
97 if (worker_.joinable())
101 ChaosController(ChaosController
const&) =
delete;
102 auto operator=(ChaosController
const&) -> ChaosController& =
delete;
105 template <
typename Predicate>
106 void run_loop(Predicate pred)
108 std::mt19937 rng(std::random_device{}());
112 auto blk = registry().get(info.tid);
117 if (config_.shuffle_affinity)
123 static_cast<int>(idx % (topo.numa_nodes > 0 ? topo.numa_nodes : 1)),
static_cast<int>(idx));
124 (void)registry().set_affinity(info.tid, aff);
130 if (config_.priority_jitter != 0)
132 std::uniform_int_distribution<int> dist(-config_.priority_jitter, config_.priority_jitter);
134 int delta = dist(rng);
137 (void)registry().set_priority(info.tid,
ThreadPriority{prio.value() + delta});
141 std::this_thread::sleep_for(config_.interval);
146 std::atomic<bool> stop_;