21xrx.com
2024-11-22 12:06:37 Friday
登录
文章检索 我的文章 写文章
C++三线程无限循环打印abc
2023-07-06 22:34:09 深夜i     --     --
C++ 三线程 无限循环 打印abc

在多线程编程中,线程的并发运行可以让程序的效率得到明显提升。而打印abc的无限循环任务,是一个比较好的多线程编程练手项目。

考虑使用C++编写一个程序,实现三个线程无限循环地打印abc。

代码如下:


#include <iostream>

#include <thread>

#include <mutex>

#include <condition_variable>

std::mutex mtx;

std::condition_variable cv;

int state = 0;

void printA() {

  while (true) {

    std::unique_lock<std::mutex> lck(mtx);

    cv.wait(lck, [] return state == 0; );

    std::cout << "a";

    state = 1;

    cv.notify_all();

  }

}

void printB() {

  while (true) {

    std::unique_lock<std::mutex> lck(mtx);

    cv.wait(lck, [] return state == 1; );

    std::cout << "b";

    state = 2;

    cv.notify_all();

  }

}

void printC() {

  while (true) {

    std::unique_lock<std::mutex> lck(mtx);

    cv.wait(lck, [] return state == 2; );

    std::cout << "c" << std::endl;

    state = 0;

    cv.notify_all();

  }

}

int main() {

  std::thread t1(printA);

  std::thread t2(printB);

  std::thread t3(printC);

  t1.join();

  t2.join();

  t3.join();

  return 0;

}

首先,程序定义了一个互斥量mtx和一个条件变量cv,用来控制线程的同步。

printA、printB和printC三个函数分别用来打印字符a、b和c,并利用互斥量和条件变量控制线程的执行顺序,在满足特定条件时才执行打印操作并修改状态。

主函数中启动了三个线程,分别执行打印a、b和c的任务,并通过join()函数让主线程等待所有子线程执行完毕后再结束程序。

这样,就成功地实现了三个线程无限循环地打印abc的任务。当运行程序后,屏幕上会不停地向外输出abcabcabcabc……无限循环下去。

需要注意的是,线程的执行顺序需要通过状态的转移来控制,避免出现任意两个线程之间出现死锁。因此,在程序设计时,需要仔细考虑线程的同步问题,灵活运用互斥量和条件变量等多线程编程知识,才能更加优雅地实现多线程任务。

  
  

评论区

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