21xrx.com
2025-07-13 02:45:13 Sunday
登录
文章检索 我的文章 写文章
C++编程:实现两个线程交替打印1到100
2023-07-01 00:22:19 深夜i     31     0
C++ 线程 交替打印 1到100

      return (is_odd_thread && is_print_odd) || (!is_odd_thread && !is_print_odd);

C++语言是一门非常强大的编程语言,可以用来完成各种各样的任务。在这里,我们将使用C++编程实现线程交替打印1到100的功能。

在C++中使用多线程需要包括头文件thread,它提供了一些线程相关的类和函数。我们需要创建两个线程,一次由一个线程打印1到100的奇数,另一个线程打印1到100的偶数。为了保证交替打印,我们还需要用到互斥锁_mutex和条件变量_condition_variable。

下面是实现的代码:

#include<thread>
#include<mutex>
#include<condition_variable>
#include<iostream>
std::mutex mtx;
std::condition_variable cv;
bool is_print_odd = true;
void print(int start, int end, bool is_odd_thread)
{
  for (int i = start; i <= end; i += 2)
  {
    std::unique_lock<std::mutex> lck(mtx);
    cv.wait(lck, [is_odd_thread]()
    {
      return (is_odd_thread && is_print_odd) || (!is_odd_thread && !is_print_odd);
    });
    std::cout << i << std::endl;
    is_print_odd = !is_print_odd;
    cv.notify_all();
  }
}
int main()
{
  std::thread t1(print, 1, 100, true);
  std::thread t2(print, 2, 100, false);
  t1.join();
  t2.join();
  return 0;
}

在上面的代码中,函数print用于打印数字,参数start和end用于指定打印的范围,is_odd_thread用于标记当前线程是否是打印奇数的线程。在函数中,我们定义了一个独占互斥锁来保证两个线程交替打印数字。通过条件变量cv等待对应的打印线程,如果不是该线程打印,就一直等待,直到可以打印为止。在打印完后,我们将is_print_odd的值取反,再通过条件变量cv唤醒另一个线程。最后,我们创建了两个线程t1和t2,一个打印奇数,一个打印偶数,并让主线程等待它们执行完后再结束程序。

总之,使用C++中的多线程编程可以方便实现线程之间的协作,让程序编写更加灵活和高效。同时,需要注意的是,在多线程编程中一定要注意线程安全,防止出现数据竞争等问题。

  
  
下一篇: C++程序运行

评论区