21xrx.com
2024-11-08 23:14:57 Friday
登录
文章检索 我的文章 写文章
C++如何实现两个线程交替打印奇数和偶数?
2023-06-21 06:38:37 深夜i     --     --
C++ 线程 交替打印 奇数 偶数

C++是一种程序设计语言,其多线程特性使得它能够支持多个线程同时工作。在实际应用中,需要掌握一些技巧来处理线程之间的交互。下面我们就来介绍一下,如何使用C++实现两个线程交替打印奇数和偶数。

首先,我们可以定义两个共享变量,一个变量存储当前打印的数值,另一个变量判断当前是奇数还是偶数。在这个基础上,我们可以实现两个线程分别对这两个变量进行修改和访问。具体实现如下:


#include <iostream>

#include <thread>

#include <mutex>

#include <condition_variable>

using namespace std;

int number = 0;

bool isOdd = true;

mutex mtx;

condition_variable cv;

void printNumber(int target)

{

  while(true)

  {

    unique_lock<mutex> lk(mtx);

    cv.wait(lk, [=](){return isOdd == target;});

    cout << number << endl;

    ++number;

    isOdd = !isOdd;

    cv.notify_all();

  }

}

int main()

{

  thread t1(printNumber, 1);

  thread t2(printNumber, 0);

  t1.join();

  t2.join();

  return 0;

}

这里,我们使用了互斥量来保护共享变量的访问,条件变量来协调两个线程的交互。具体实现思路是,每个线程都会在自己的while循环中等待变量isOdd等于特定值(1或0),在得到条件满足通知后打印当前的数字,并将变量number加1,同时将isOdd取反。最后通知其他线程去尝试获取锁并等待条件满足再执行。

通过这种方式,我们可以保证两个线程按照奇数和偶数的顺序打印所有的数字。这个方法在C++中是很常用的,因此我们需要掌握这种技巧,以便在实际应用中能够更好地处理线程间的交互。

  
  

评论区

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