21xrx.com
2024-11-22 09:59:07 Friday
登录
文章检索 我的文章 写文章
使用C++编写程序实现ABC的三个线程轮流执行并按顺序打印输出
2023-06-23 03:01:51 深夜i     --     --
C++ 程序 ABC 三个线程 轮流执行 打印输出 顺序

C++编写程序实现ABC的三个线程轮流执行并按顺序打印输出

多线程编程一直是C++编程中比较复杂和有趣的部分,因为它涉及到数据共享和同步。在这篇文章中,我们将展示如何使用C++编写程序实现ABC的三个线程轮流执行并按顺序打印输出。

三个线程的实现

在C++中,可以使用线程库来实现多线程编程。这个库是在C++11中引入的,它提供了一些重要的类,函数和方法,这些可以用来实现线程。以下是线程的实现部分。

#include

#include

#include

#include

using namespace std;

mutex m;

condition_variable cv;

int turn = 1;

void printA()

{

  unique_lock lock(m);

  for (int i = 1; i <= 10; i++)

  {

    while (turn != 1)

    {

      cv.wait(lock);

    }

    cout << "A" << " ";

    turn = 2;

    cv.notify_all();

  }

}

void printB()

{

  unique_lock lock(m);

  for (int i = 1; i <= 10; i++)

  {

    while (turn != 2)

    {

      cv.wait(lock);

    }

    cout << "B" << " ";

    turn = 3;

    cv.notify_all();

  }

}

void printC()

{

  unique_lock lock(m);

  for (int i = 1; i <= 10; i++)

  {

    while (turn != 3)

    {

      cv.wait(lock);

    }

    cout << "C" << " ";

    turn = 1;

    cv.notify_all();

  }

}

int main()

{

  thread t1(printA);

  thread t2(printB);

  thread t3(printC);

  t1.join();

  t2.join();

  t3.join();

  cout << endl;

  return 0;

}

在这个示例中,我们定义了三个线程printA,printB和printC来打印A,B和C。我们使用了一把互斥锁和一个条件变量来控制这三个线程的执行次序。我们还定义了一个整形变量turn来指示哪个线程有权进行输出。

互斥锁用于对cout进行保护,以避免多个线程尝试同时输出它们的字符。条件变量用于通知线程何时轮到它们输出。线程必须等待其轮到它们时才能输出。

线程执行的结果

当我们运行上面的代码时,我们将得到以下输出。

A B C A B C A B C A B C A B C A B C A B C A B C A B C

我们可以看到,三个线程在依次循环并按顺序打印输出。这里每个线程都打印了10次。如果你希望线程运行的次数更多,可以相应地更改循环的上限。

总结

在本文中,我们已经展示了如何使用C++编写程序实现ABC的三个线程轮流执行并按顺序打印输出。我们实现多线程编程的方法基于C++11的线程库,并使用互斥锁和条件变量来控制线程。当线程按顺序执行时,使用这个方法可以避免数据竞争和死锁等问题。如果你是一个C++程序员,这个例子将有助于加深你对多线程编程的理解。

  
  

评论区

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