21xrx.com
2024-06-03 01:50:25 Monday
登录
文章检索 我的文章 写文章
C++多线程实现交替打印两个数组
2023-07-10 02:16:43 深夜i     --     --
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++的多线程和条件变量等特性,可以帮助我们更好的理解和掌握多线程编程技术。

  
  

评论区

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