21xrx.com
2024-12-28 08:27:44 Saturday
登录
文章检索 我的文章 写文章
如何在C++多线程中交替输出字符串?
2023-06-29 03:51:03 深夜i     --     --
C++ 多线程 交替输出 字符串

在C++多线程编程中,交替输出字符串是一个常见的问题。这里提供一种简单的解决方案来实现该功能。

首先,创建两个线程来输出两个不同的字符串。为了让输出交替进行,利用互斥锁(Mutex)和条件变量(ConditionVariable)来控制线程的执行。

具体地,我们将在主线程中创建一个互斥锁和两个条件变量,分别用于通知两个线程何时可以开始输出他们的字符串。然后,每个线程在输出完成后会等待另一个线程发出的信号,表示另一个线程已经完成输出。此时,该线程会释放锁并等待下一个信号。

以下是示例代码:


#include <iostream>

#include <thread>

#include <mutex>

#include <condition_variable>

std::mutex mtx;

std::condition_variable cv;

bool flag = false;

void printString(const std::string& str, bool val) {

  while (true) {

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

    while (flag != val) {

      cv.wait(lock);

    }

    std::cout << str << std::endl;

    flag = !val;

    cv.notify_all();

  }

}

int main() {

  std::thread t1(printString, "Hello", false);

  std::thread t2(printString, "World", true);

  t1.join();

  t2.join();

  return 0;

}

在上面的代码中,`flag` 变量用于标识当前正在执行的线程,`false` 表示 `t1` 线程在执行,`true` 表示 `t2` 线程在执行。通过互斥锁和条件变量的控制,两个线程会交替输出自己的字符串,直到程序终止。

总结:使用互斥锁和条件变量可以很方便地实现 C++ 多线程中的交替输出字符串功能。注意,为了避免死锁,我们应该使用 `unique_lock` 来代替 `lock_guard`,以支持在等待期间进行解锁和再次加锁的操作。

  
  

评论区

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