+static void WorkerThread(const std::string &Cmd, std::atomic<int> *Counter,
+ int NumJobs) {
+ while (true) {
+ int C = (*Counter)++;
+ if (C >= NumJobs) return;
+ std::string ToRun = Cmd + " > fuzz-" + std::to_string(C) + ".log 2>&1\n";
+ if (Flags.verbosity)
+ std::cerr << ToRun;
+ system(ToRun.c_str());
+ }
+}
+
+static int RunInMultipleProcesses(int argc, char **argv, int NumWorkers,
+ int NumJobs) {
+ std::atomic<int> Counter(0);
+ std::string Cmd;
+ for (int i = 0; i < argc; i++) {
+ if (FlagValue(argv[i], "jobs") || FlagValue(argv[i], "workers")) continue;
+ Cmd += argv[i];
+ Cmd += " ";
+ }
+ std::vector<std::thread> V;
+ for (int i = 0; i < NumWorkers; i++)
+ V.push_back(std::thread(WorkerThread, Cmd, &Counter, NumJobs));
+ for (auto &T : V)
+ T.join();
+ return 0;
+}
+