21xrx.com
2024-12-22 20:30:54 Sunday
登录
文章检索 我的文章 写文章
C++编程:实现两个线程交替打印1到100
2023-07-01 00:22:19 深夜i     --     --
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++程序运行

评论区

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