Возобновить программу, если значение переменной изменится

0

Есть ли способ в 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 значение, поэтому основной процесс будет продолжаться.

Есть ли еще один, более хороший способ?

Благодарю.

  • 0
    смотри stackoverflow.com/questions/18038786/…
  • 1
    посмотрите на std :: condition_variable в c ++ 11 ... Вам нужно будет синхронизировать (защитить с помощью блокировки) доступ на запись к "a", чтобы использовать его.
Показать ещё 1 комментарий
Теги:
signals
semaphore
events

1 ответ

2
Лучший ответ

Я считаю, что вам нужна переменная условия pthread, устройство синхронизации:

Условие (short for '' condition variable) - это устройство синхронизации, которое позволяет потокам приостанавливать выполнение и отказываться от процессоров до тех пор, пока не будет удовлетворен некоторый предикат для общих данных. Основные операции над условиями: сигнализировать условие (когда предикат становится истинным) и ждать условия, приостанавливая выполнение потока, пока другой поток не сигнализирует о состоянии.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню