21xrx.com
2024-11-05 16:42:12 Tuesday
登录
文章检索 我的文章 写文章
「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++多线程编程来实现打印奇偶数是一件非常有价值的事情。它不仅可以提高程序的效率,还可以展示出多线程编程的威力。通过以上例子,我们可以更好地了解多线程编程的不同应用场景,并将这种技术应用到实际工作中。

  
  

评论区

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