Какой метод защиты использовать (мьютекс, readwritelock ..) для внутренней функции потока - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть поток, который опрашивает данные из веб-службы и затем отправляет их в другой класс для обработки данных. Процесс обработки этих данных может занять много времени, иногда больше, чем интервал таймера, который вызывает функцию опроса внутри потока.
Я хотел бы защитить эту функцию опроса, то есть, пока идет обработка данных, не входите в эту функцию.

Мой поток такой

workerThread -> start timer -> that invoking the polling method ->
the polling method gets the data and send it to processing  > mean while this polling function can be called again .

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Если ваша функция опроса выполняется дольше, чем таймер опроса, чем в вашей реализации функции, вы можете попытаться заблокировать мьютекс

void pollingFunction() {

    bool isLocked = mutex.tryLock(3000); //timeout if you want
    if(isLocked) 
    {
       //process the data
    }
    else 
    {
      return;
    }

    mutex.unlock();
} 
0 голосов
/ 01 февраля 2012

Я предполагаю, что вы используете как минимум 2 темы.один запускается таймером, другой обрабатывает данные опроса.так что шаблон Monitor Object будет работать для него, вам нужно определить очередь для данных опроса и определить 2 переменные условия (не полные, не пустые).если он не заполнен, опрос может начаться, а затем поместить данные в очередь.если он не пустой, то обработка может восстановить данные и обработать их.

...