У меня есть класс проверки, который использует ah threadpool для обработки всех своих заданий.Как написать метод blockng waitUntil() в пул, который использует std :: atomics
Теперь, когда пользователь спрашивает, я начинаю поток, который передает мой класс проверки заданиями путем чтения с диска. И я уверен, что в какой-то момент чтение будет быстрее обработки. Поэтому я хочу написать метод, позволяющий этому потоку ждать, если будет обработано более 1000 заданий.
Я уже ввел атом, который увеличивается, когда задание добавляется и уменьшается при завершении работы.
Моя попытка добавить метод была не такой приятной. И я знаю, что нужно использовать что-то лучше.
void Validator::waitUntilAvailable() {
while (m_blocksInFlight > 1000) { // thats my atomic
usleep(50000); // seems to be unavailable on Windows.
}
}
Может ли кто-нибудь здесь помочь в использовании метода опроса для решения моей проблемы?
спасибо.
звучит как идеальный для использования семафора –
... простой реализации здесь: https://gist.github.com/sguzman/9594227 –
@RichardHodges выглядит как копия с HTTP: // stackoverflow.com/a/4793662/412080 –