21xrx.com
2024-11-05 18:57:57 Tuesday
登录
文章检索 我的文章 写文章
C++ 多线程编程:轮流执行顺序打印 ABC
2023-07-05 14:55:32 深夜i     --     --
C++ 多线程编程 轮流执行 顺序打印 ABC

在C++中,多线程编程是一项非常常见的技巧。它可以使程序并发执行多个任务,从而获得更高的性能和效率。其中,轮流执行顺序打印ABC是一个经典的多线程编程案例。

在这个案例中,我们需要创建三个线程,每个线程分别负责打印A、B、C三个字符,并且它们的执行顺序需要按照ABC的顺序轮流执行。换言之,如果A已经执行了,则B和C线程都要等待直到A执行完,才能继续执行。

下面是一个示例代码实现:


#include <iostream>

#include <thread>

#include <mutex>

#include <condition_variable>

using namespace std;

mutex mtx;

condition_variable cv;

int flag = 1;

void printA()

{

 while (true)

 {

  unique_lock<mutex> lock(mtx);

  while (flag != 1)

   cv.wait(lock);

  cout << "A" << endl;

  flag = 2;

  cv.notify_all();

 }

}

void printB()

{

 while (true)

 {

  unique_lock<mutex> lock(mtx);

  while (flag != 2)

   cv.wait(lock);

  cout << "B" << endl;

  flag = 3;

  cv.notify_all();

 }

}

void printC()

{

 while (true)

 {

  unique_lock<mutex> lock(mtx);

  while (flag != 3)

   cv.wait(lock);

  cout << "C" << endl;

  flag = 1;

  cv.notify_all();

 }

}

int main()

{

 thread a(printA);

 thread b(printB);

 thread c(printC);

 a.join();

 b.join();

 c.join();

 return 0;

}

在上面的代码中,我们使用了互斥锁和条件变量来实现线程间的同步。通过设置一个flag变量,每个线程在执行前都会先对flag进行判断,只有当flag符合其要求时,才会执行打印操作。同时,每个线程执行完毕后,都需要通过互斥锁和条件变量来唤醒其它线程。

这个例子只是多线程编程的冰山一角。实际上,当程序中涉及到多个线程同时执行的时候,就需要进行线程同步和互斥操作,否则程序就会出现死锁等严重问题。因此,在使用多线程编程时,一定要注意这些细节,从而确保程序的正确性和稳定性。

  
  

评论区

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