21xrx.com
2025-03-26 09:12:22 Wednesday
文章检索 我的文章 写文章
「C++多线程」实现打印奇偶数
2023-06-22 15:48:43 深夜i     --     --
C++ 多线程 打印 奇数 偶数

在现代编程中,多线程编程是非常重要的一部分。在C++中,多线程编程可以帮助我们解决许多问题,比如提高程序的效率和优化。而今天我们要介绍的是如何使用C++多线程编程来实现打印奇偶数。

首先,我们需要明确的是,多线程编程的核心是线程同步。在这个例子中,我们需要使用两个线程来分别打印奇数和偶数,同时要保证这两个线程交替执行,避免重复打印同一个数。因此,我们需要使用互斥锁和条件变量来进行线程同步。

接下来,我们就可以开始编写程序了。下面是实现打印奇偶数的C++多线程代码:

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
mutex mtx;
condition_variable cv;
int n = 0;
void print_odd()
{
  while(n < 10)
  {
    unique_lock<mutex> lock(mtx);
    cv.wait(lock, []{return n%2 == 1;});
    cout << "奇数:" << n << endl;
    n++;
    cv.notify_all();
  }
}
void print_even()
{
  while(n < 10)
  {
    unique_lock<mutex> lock(mtx);
    cv.wait(lock, []{return n%2 == 0;});
    cout << "偶数:" << n << endl;
    n++;
    cv.notify_all();
  }
}
int main()
{
  thread t1(print_odd);
  thread t2(print_even);
  t1.join();
  t2.join();
  return 0;
}

在上述代码中,我们定义了两个线程分别为print_odd()函数和print_even()函数。其中print_odd()函数负责打印奇数,print_even()函数负责打印偶数。同时,我们定义了互斥锁和条件变量来进行线程同步。

在每个函数中,我们使用了unique_lock来进行互斥锁的加锁和解锁操作。在函数执行过程中,我们使用了条件变量cv来进行线程同步。其中,wait()函数会使得当前线程阻塞,直到其中断条件满足时才会继续执行。而notify_all()函数则会唤醒所有等待在该条件变量的线程,让它们重新执行。

最后,在main函数中我们创建了两个线程,并分别调用print_odd()和print_even()函数。我们使用join()函数来等待两个线程执行完成。

综上所述,使用C++多线程编程来实现打印奇偶数是一件非常有价值的事情。它不仅可以提高程序的效率,还可以展示出多线程编程的威力。通过以上例子,我们可以更好地了解多线程编程的不同应用场景,并将这种技术应用到实际工作中。

  
  

评论区