mardi 27 septembre 2016

wait_until behavior for time_point::max

On an embedded platform I ran into the issue that when waiting on a condition until time_point<clock>::max(), the program enters a busy loop completely using a CPU.

The program I am running is:

#include <mutex>
#include <condition_variable>
#include <iostream>

int main() {
  std::mutex mutex;
  std::condition_variable condition;

  using namespace std::chrono;
  using clock = steady_clock;
  for (;;) {
    auto forever = time_point<clock>::max();
    std::unique_lock<std::mutex> lock(mutex);

    std::cout << "Now waiting" << std::endl;
    condition.wait_until(lock, forever);
    std::cout << "Now waking up" << std::endl;
  }

  return 0;
}

I was quite sure this is a bug, and running this on my host's compiler (g++ 4.7) the application behaved as I expected (blocking forever). When writing a bug report I wanted to attach an ideone sample demonstrating the issue, but ideone also runs into a busy loop:

http://ift.tt/2doglif

Now I am unsure who is correct here. Is there a standard definition of how wait_until on a condition should behave when the second argument is time_point<clock>::max()?

Aucun commentaire:

Enregistrer un commentaire