21xrx.com
2024-11-05 16:42:47 Tuesday
登录
文章检索 我的文章 写文章
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++编程中,使用条件变量是很常见的技术手段。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复