Сделаю.

чаю многопоточность и написал этот код:

#include <iostream>
#include <mutex>
#include <thread>
#include <string>
#include <chrono>
#include <condition_variable>

int distance = 20;
int distanceCovered = 0;
std::condition_variable cv;
std::mutex mu;

void keep_moving(){
  while(true){
  std::cout << "Distance is: " << distanceCovered << std::endl;
  std::this_thread::sleep_for(std::chrono::milliseconds(1000));
  distanceCovered++;
  if(distanceCovered == distance){
    cv.notify_one();
    std::terminate();
   }
 }
}

void wake_me_up()
{
  std::unique_lock<std::mutex> ul(mu);
  cv.wait( ul, []{ return distanceCovered==distance; });   // protects the lines of code below
  std::cout << "I'm here" << std::endl;
  std::terminate();
}

int main() {
  std::thread driver(keep_moving);
  std::thread wake_me(wake_me_up);
  driver.join();
  wake_me.join();

  system("pause");

  return 0;
}

Как вы можете видеть, поток keep_moving считает от 0 до 20 в течение 20 секунд, а затем уведомляет поток «wake_me_up», который печатает «Я здесь», а затем завершается. После уведомления потока «keep_moving» также завершается.

Пожалуйста, скажите мне, правильно ли я завершаю темы. Когда я запускаю этот код, я получаю следующее сообщение:

terminate called without an active exception
I'm here
terminate called recursively
Aborted

Спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос