21xrx.com
2025-03-25 22:38:50 Tuesday
文章检索 我的文章 写文章
C++多线程实现交替打印两个数组
2023-07-10 02:16:43 深夜i     14     0
C++ 多线程 交替打印 数组 实现

C++是一门广泛使用的编程语言,既支持面向过程的编程方式,也支持面向对象的编程方式。而多线程编程则是C++语言中的一个重要特性,它可以让程序在同一时间内执行多个任务,从而提高程序的效率。在本文中,我们将介绍如何用C++实现交替打印两个数组的程序。

为了实现交替打印两个数组,我们可以通过创建两个线程来完成。一个线程负责打印第一个数组,另一个线程负责打印第二个数组。在每次打印完一个数组后,线程休眠一段时间,然后再轮流打印另一个数组。下面是实现这个程序的代码:

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
int array1[5] = 7;
int array2[5] = 4;
mutex mtx;
condition_variable cv;
bool print_array1 = true;
void print(int *arr) {
  while (true) {
    unique_lock<mutex> ul(mtx);
    while ((print_array1 && arr != array1) || (!print_array1 && arr != array2)) {
      cv.wait(ul);
    }
    for (int i = 0; i < 5; i++) {
      cout << arr[i] << " ";
    }
    cout << endl;
    print_array1 = !print_array1;
    cv.notify_all();
    ul.unlock();
    this_thread::sleep_for(chrono::milliseconds(500));
  }
}
int main() {
  thread t1(print, array1);
  thread t2(print, array2);
  t1.join();
  t2.join();
  return 0;
}

在这个程序中,我们首先定义了两个数组array1和array2,分别存储了5个整数。然后我们定义了一个互斥锁mtx和一个条件变量cv来控制两个线程的访问顺序。我们在全局变量print_array1中维护了一个标志位,用来表示当前应该打印哪个数组。

在打印函数中,我们先获取互斥锁,然后在一个循环中判断当前应该打印哪个数组。如果不是当前的数组,则调用条件变量的wait()方法等待唤醒。唤醒操作完成后,打印当前数组,并将标志位取反。最后,我们调用条件变量的notify_all()方法唤醒等待中的线程,并释放互斥锁。在打印完一个数组后,线程休眠500毫秒。

在主函数中,我们分别创建了两个线程t1和t2,它们执行的函数分别为print(array1)和print(array2)。最后,我们调用两个线程的join()方法等待线程执行完成。

运行这个程序,我们可以看到交替打印两个数组的效果。这个程序的实现利用了C++的多线程和条件变量等特性,可以帮助我们更好的理解和掌握多线程编程技术。

  
  

评论区