Зависимость между 2 фьючерсами - PullRequest
0 голосов
/ 11 июня 2018

пожалуйста, смотрите код ниже.

int cond = true;

void f1()
{
     while(cond)
     {

     }
}

void f2()
{
     cond  = false;
}

int main()
{
     auto fut1 = std::async(f1);
     auto fut2 = std::async(f2);
     fut1.get();
     fut2.get();
}

Мой вопрос: будет ли эта программа бесконечно работать на однопоточном sw / hw?Я не могу проверить это, потому что мой std :: hardware_concurrency показывает 8, и я не знаю, как заставить программу работать в одном потоке.

1 Ответ

0 голосов
/ 11 июня 2018

Эта программа НЕ будет работать бесконечно, как только f2 () будет вызвана вторым потоком, она установит для cond значение false

Согласно определению Async : Функция шаблона async выполняет функцию f асинхронно ( потенциально в отдельном потоке, который может быть частью пула потоков ) и возвращает std :: future, который в конечном итоге будет содержатьрезультат этого вызова функции.

Существует 3 основных потока Тема: f1 поток: f2 поток:

поток будет:

  1. основной поток
  2. запуск потока f1 --- выполнение тела f1 в соответствии с жизненным циклом потока
  3. запуск потока f2 --- выполнение тела f2 и установка cond

приf2 получить шанс зависит от планирования потока и заблокирован, указанный для ex: если вы спите в f1 и f2 получит шанс

мне любопытно увидеть ответы других

...