21xrx.com
2024-09-19 09:28:41 Thursday
登录
文章检索 我的文章 写文章
C++多线程编程——实现两个线程交替执行
2023-07-05 05:29:59 深夜i     --     --
C++ 多线程编程 交替执行 并发 线程同步

C++是一种广泛使用的编程语言,它的多线程编程能力非常强大,可以实现并行处理,提高程序的运行速度。其中,实现两个线程交替执行是一种常见的多线程编程模式。下面我们来介绍一下如何使用C++实现这种模式。

首先,我们需要了解C++中的多线程编程机制。C++标准库中提供了一个thread类,可以用来创建和管理线程。使用此类所需的头文件是 。要创建一个线程,我们需要定义一个函数,将其作为线程的入口点,并将其作为参数传递给thread类的构造函数。例如:


#include <thread>

#include <iostream>

void thread_func()

  std::cout<<"hello from thread"<<std::endl;

int main()

{

  std::thread t(thread_func);

  t.join();

  std::cout<<"hello from main"<<std::endl;

}

在上面的代码中,我们定义了一个名为thread_func的函数,该函数将在新线程中运行,输出一条消息。在main函数中,我们创建了一个名为t的线程,并将函数thread_func作为其入口点。然后,我们使用join函数等待线程t完成执行。最后,主线程输出一条消息。当我们运行此代码时,我们应该会看到输出:


hello from thread

hello from main

现在我们已经了解了C++中创建线程的基本知识,让我们来看看如何实现交替执行的两个线程。为了实现这种模式,我们需要使用信号量或互斥量等同步机制来保证线程之间的交替执行。在这里,我们将使用互斥量(mutex)。互斥量是一种保护共享资源的机制,它能够确保同时只会有一个线程访问此资源。

下面是一个简单的例子,使用互斥量实现两个线程的交替执行:


#include <thread>

#include <iostream>

#include <mutex>

std::mutex mtx;

void thread1()

{

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

  {

    mtx.lock(); // 加锁

    std::cout<<"hello from thread 1"<<std::endl;

    mtx.unlock(); // 解锁

  }

}

void thread2()

{

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

  {

    mtx.lock(); // 加锁

    std::cout<<"hello from thread 2"<<std::endl;

    mtx.unlock(); // 解锁

  }

}

int main()

{

  std::thread t1(thread1);

  std::thread t2(thread2);

  t1.join();

  t2.join();

  std::cout<<"hello from main"<<std::endl;

}

在上面的代码中,我们定义了两个函数thread1和thread2,它们会交替执行。在每个函数中,我们首先使用mtx.lock()函数获得互斥量的锁,以确保只有一个线程能够访问打印信息的代码块。然后,我们输出一条消息。最后,我们使用mtx.unlock()函数释放锁,以便另一个线程可以获取互斥量的使用权。

我们在main函数中创建了两个线程t1和t2,并将相应的函数作为它们的入口点。线程t1和t2会交替执行,输出各自的消息。当两个线程完成后,主线程输出一条消息。

通过上述代码,我们可以看到,使用互斥量能够很方便地实现两个线程的交替执行。除此之外,我们还可以使用条件变量(condition variable)等其他同步机制来实现这种模式。总的来说,C++中的多线程编程能力非常强大,可以帮助我们实现各种复杂的并发应用。

  
  
下一篇: C++常用STL函数

评论区

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