pthread_cond_t notify;
void* worker(void *arg) {
pthread_mutex_t *mtx = arg;
pthread_mutex_lock(mtx);
for(;;) {
pthread_cond_wait(¬ify, mtx);
// Выполнение работы
// Сигнализируем о выполненной работе
}
return NULL;
}
int main() {
pthread_t threads[4];
pthread_mutex_t mtxs[4];
// Инициализируем условную переменную
pthread_cond_init(¬ify, NULL);
// Создаём 4 потока
for(int i = 0; i < 4; i++) {
pthread_mutex_init(&mtxs[i], NULL);
pthread_create(&threads[i], NULL, worker, &mtxs[i]);
}
// Некоторый код
// Некоторый код
// Некоторый код
// Передаём данные через глобальные переменные 4 потокам
// Выводим 4 потока из спящего режима
pthread_cond_broadcast(¬ify);
// Ожидаем выполнения 4 потоков
}