21xrx.com
2025-06-20 21:46:53 Friday
文章检索 我的文章 写文章
C++实现三个线程循环打印ABC
2023-07-09 00:52:02 深夜i     144     0
C++ 线程 循环 打印 ABC

在计算机编程的领域中,多线程是一种非常常见的编程方式。这种方式可以让程序同时执行多个任务,从而提高程序的执行效率。而在多线程编程中,线程同步是非常关键的概念,它可以让不同的线程之间协调执行。本次我们将通过C++语言实现三个线程循环打印ABC。

在C++语言中,我们可以使用线程库来实现多线程编程。在这个例子中,我们将使用三个线程,每个线程都负责打印一种字母:A、B、C。而为了让三个线程循环打印,我们必须使用线程同步技术。

简单来说,线程同步就是让不同的线程按照预定的顺序执行。在本例中,我们将使用互斥量和条件变量来实现线程同步。

互斥量可以保证在任何时候只有一个线程可以执行关键代码段。条件变量是一个信号机制,可以让一个线程等待另一个线程的完成。

下面是实现代码:

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
mutex mtx;
condition_variable cv;
int count = 0;
void printThread(char c) {
  for (int i = 0; i < 10;) {
    unique_lock<mutex> lock(mtx);
    cv.wait(lock, [&]() return count % 3 == i % 3; ); //等待条件变量
    cout << c << " ";
    count++;
    i++;
    cv.notify_all(); //唤醒其他线程
  }
}
int main() {
  thread t1(printThread, 'A');
  thread t2(printThread, 'B');
  thread t3(printThread, 'C');
  t1.join();
  t2.join();
  t3.join();
  return 0;
}

在代码中,我们定义了一个互斥量mtx和一个条件变量cv。在printThread函数中,我们首先获取互斥量的锁,并使用条件变量cv等待。在等待过程中,我们采用lambda函数来判断当前应该打印哪个字母。当一个线程打印完一个字母后,会通过cv.notify_all()函数唤醒其他线程,让它们获取互斥量锁并进行打印。

在主函数中,我们创建了三个线程并将它们加入到主线程中。这三个线程会无限循环打印字母ABC。

这就是使用互斥量和条件变量实现三个线程循环打印ABC的方法。通过这种方式,我们可以更好地理解多线程编程中的线程同步机制。同时,在实际开发中,我们也可以将这种方法应用于更复杂的多线程场景中。

  
  

评论区