21xrx.com
2024-11-05 18:31:31 Tuesday
登录
文章检索 我的文章 写文章
C++实现三个线程循环打印ABC
2023-07-09 00:52:02 深夜i     --     --
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的方法。通过这种方式,我们可以更好地理解多线程编程中的线程同步机制。同时,在实际开发中,我们也可以将这种方法应用于更复杂的多线程场景中。

  
  

评论区

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