21xrx.com
2024-11-22 08:23:07 Friday
登录
文章检索 我的文章 写文章
C++多线程:打印ABC
2023-07-05 11:38:34 深夜i     --     --
C++ 多线程 打印ABC 线程同步 互斥锁

在C++程序中,我们可以使用多线程来实现一些并发操作。其中,一个非常常见的例子是打印ABC。

在这个例子中,我们需要开启三个线程,分别打印字母A、B、C。这些线程之间需要进行同步,以确保它们按照正确的顺序打印出字母。

为了实现这一点,我们可以使用互斥锁(mutex)和条件变量(condition variable)。互斥锁可以确保在任何时候只有一个线程可以访问共享资源,而条件变量可以用来唤醒等待线程。

下面是一段简单的C++程序,可以让三个线程交替打印ABC:


#include <mutex>

#include <condition_variable>

#include <thread>

#include <iostream>

std::mutex mtx;

std::condition_variable cv;

int count = 0;

void printA() {

  while (true) {

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

    while (count % 3 != 0) cv.wait(lck);

    std::cout << "A" << std::endl;

    count++;

    cv.notify_all();

  }

}

void printB() {

  while (true) {

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

    while (count % 3 != 1) cv.wait(lck);

    std::cout << "B" << std::endl;

    count++;

    cv.notify_all();

  }

}

void printC() {

  while (true) {

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

    while (count % 3 != 2) cv.wait(lck);

    std::cout << "C" << std::endl;

    count++;

    cv.notify_all();

  }

}

int main() {

  std::thread t1(printA);

  std::thread t2(printB);

  std::thread t3(printC);

  t1.join();

  t2.join();

  t3.join();

}

在这个程序中,我们开启了三个线程printA、printB、printC,它们在while循环中通过互斥锁和条件变量实现交替打印ABC的功能。

当count%3等于0时,线程printA打印字母A,并将count加1,然后唤醒所有等待线程。当count%3等于1时,线程printB打印字母B,以此类推。这样我们就能确保三个线程交替打印ABC,永远不会出现重复或者错位的情况。

这只是多线程在C++中的一个小例子,但它展示了如何使用互斥锁和条件变量来实现同步。在实际开发中,我们可能需要处理更加复杂的并发问题,但这种基础知识对于学习和理解多线程编程是非常重要的。

  
  

评论区

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