21xrx.com
2024-09-19 09:20:54 Thursday
登录
文章检索 我的文章 写文章
C++实现两个线程交替打印奇数和偶数
2023-07-04 22:35:09 深夜i     --     --
C++ 线程 交替打印 奇数 偶数

C++ 实现两个线程交替打印奇数和偶数

多线程编程是现代编程语言中的一个重要领域,C++中提供了多线程编程的支持,可以利用C++库中的线程类和互斥量来实现线程之间的同步和互斥。

本文将介绍如何使用两个线程交替打印奇数和偶数。

首先,需要定义两个线程函数,一个用来打印奇数,一个用来打印偶数。

void printOdd()

{

  for(int i = 1; i <= 10; i+=2)

  {

    cout << "Odd: " << i << endl;

    //释放偶数互斥量锁

    mtx_even.unlock();

    //获取奇数互斥量锁

    mtx_odd.lock();

  }

}

void printEven()

{

  for(int i = 2; i <= 10; i+=2)

  {

    //获取偶数互斥量锁

    mtx_even.lock();

    cout << "Even: " << i << endl;

    //释放奇数互斥量锁

    mtx_odd.unlock();

  }

}

在主函数中,需要定义两个互斥量,一个用来控制奇数的线程,一个用来控制偶数的线程。定义两个互斥量是为了保证只有一个线程在输出,另一个线程只有等待。

int main()

{

  thread t1(printOdd);

  thread t2(printEven);

  //初始化偶数互斥量,为上锁状态

  mtx_even.lock();

  t1.join();

  t2.join();

  return 0;

}

主函数中创建线程t1用于打印奇数,线程t2用于打印偶数。初始化偶数互斥量为上锁状态。线程t1和t2分别执行printOdd和printEven函数中的循环语句,可以实现奇数和偶数的交替输出。

当printOdd函数执行到mtx_odd.lock()语句时,奇数互斥量被锁定,线程t1被暂停,只有在printEven函数中执行mtx_even.unlock()语句时,奇数互斥量才会被释放,才有可能继续执行线程t1中的代码,输出奇数。同样地,当printEven函数执行到mtx_even.lock()语句时,偶数互斥量被锁定,线程t2被暂停,只有在printOdd函数中执行mtx_odd.unlock()语句时,才有可能释放偶数互斥量,使线程t2继续执行。

总之,通过互斥量的上锁和解锁,就可以实现线程之间的同步和互斥,从而顺利地完成两个线程交替打印奇数和偶数的操作。

  
  

评论区

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