Как сказал Р. и как он должен был сделать в ответе, вам нужен предикат .Это то, что вы проверяете, чтобы убедиться, что условие истинно.
В вашем случае это должна быть простая переменная, защищенная workers_data[0].mutex
.
Затем в вашем работнике вы блокируетемьютекс, как вы уже делаете, затем проверьте предикат.Если предикат верен, вам не нужно ждать условия, поэтому не надо.Просто иди делай то, что тебе нужно.Если предикат имеет значение false, тогда подождите условие.
Один очень важный момент, который не следует забывать, состоит в том, что предикат никогда не должен изменяться вне блокировки мьютекса, используемой переменной условия.Если это так, в некоторых случаях условие будет пропущено, что приведет к зависанию потоков.