Есть ли способ в c
/c++
приостановить программу (может быть, с SIGSTOP
), а затем продолжить (SIGCONT
?), Когда другой поток изменяет значение некоторой переменной?
Например:
int main(void) {
int a = 0;
createThread(&a); //creates a thread which will change a value
pauseMyself(); //pauses main process till a value is changed
/* main process gets here only when a value has been changed */
fprintf(stderr, "a value has been changed\n");
return 0;
}
Я хочу, чтобы увидеть, если это возможно, так что не нужно будет пробовать a
значение каждого интервала - Как в while()
цикл, который проверяет значение, каждый 200мс (спит 200мс) a
Одним из возможных решений этой проблемы является использование семафоров:
Я должен инициализировать значение семафора до 0
(!). Тогда в main()
вместо pauseMyself()
я сделаю sem_wait()
, значит, основной процесс остановится там.
В функции потока сделаю sem_post()
после того, как она изменяется a
значение, поэтому основной процесс будет продолжаться.
Есть ли еще один, более хороший способ?
Благодарю.
Я считаю, что вам нужна переменная условия pthread, устройство синхронизации:
Условие (short for '' condition variable) - это устройство синхронизации, которое позволяет потокам приостанавливать выполнение и отказываться от процессоров до тех пор, пока не будет удовлетворен некоторый предикат для общих данных. Основные операции над условиями: сигнализировать условие (когда предикат становится истинным) и ждать условия, приостанавливая выполнение потока, пока другой поток не сигнализирует о состоянии.