21xrx.com
2025-03-27 04:28:39 Thursday
文章检索 我的文章 写文章
C++编程:三个线程按顺序打印ABC
2023-07-02 20:05:15 深夜i     --     --
C++ 编程 三个线程 顺序打印 ABC

在C++编程中,线程是很重要的概念,可以用来实现多任务执行和并行计算等。本文将介绍如何使用三个线程按顺序打印ABC这个经典问题的解决方案。

首先,我们需要了解一下线程的基本知识。在C++中,使用thread头文件可以创建线程,具体的方法是:

#include <thread>
void myFunction()
  // 线程执行的任务
int main() {
  // 创建线程
  std::thread myThread(myFunction);
  // 等待线程完成
  myThread.join();
  return 0;
}

当我们需要创建多个线程时,可以使用循环来进行创建。

现在,我们来看一下如何使用三个线程按顺序打印ABC。我们可以使用条件变量(condition variable)来实现线程之间的同步。

具体的实现如下:

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
// 当前打印的字符
char currentChar = 'A';
void printA() {
  std::unique_lock<std::mutex> lck(mtx);
  while (currentChar != 'A') cv.wait(lck);
  std::cout << "A";
  currentChar = 'B';
  cv.notify_all();
}
void printB() {
  std::unique_lock<std::mutex> lck(mtx);
  while (currentChar != 'B') cv.wait(lck);
  std::cout << "B";
  currentChar = 'C';
  cv.notify_all();
}
void printC() {
  std::unique_lock<std::mutex> lck(mtx);
  while (currentChar != 'C') cv.wait(lck);
  std::cout << "C";
}
int main() {
  // 创建三个线程
  std::thread t1(printA);
  std::thread t2(printB);
  std::thread t3(printC);
  // 等待线程完成
  t1.join();
  t2.join();
  t3.join();
  return 0;
}

在这个例子中,我们使用了一个条件变量cv来控制线程之间的同步。每个线程会等待当前打印的字符是自己要打印的字符,然后打印出来,并将下一个要打印的字符保存到currentChar变量中,并通知其他线程。

使用条件变量的好处在于,它可以避免线程空转,即线程一直占用CPU资源但不执行任何实际任务。

总的来说,使用条件变量可以实现线程之间的同步,避免线程空转,帮助我们实现复杂的并发编程任务。在C++编程中,使用条件变量是很常见的技术手段。

  
  

评论区