21xrx.com
2024-11-10 06:50:29 Sunday
登录
文章检索 我的文章 写文章
如何实现C++多线程顺序执行?
2023-06-24 09:20:27 深夜i     --     --
C++ 多线程 顺序执行

对于C++多线程顺序执行,我们可以使用互斥锁和条件变量来实现。互斥锁是一种同步机制,用于保护共享资源,只有一个线程可以获取该锁并访问该资源。另一方面,条件变量则用于线程之间的通信,以确保它们按照正确的顺序执行。

下面是一个简单的示例,演示如何使用互斥锁和条件变量来实现多线程顺序执行:


#include <iostream>

#include <thread>

#include <mutex>

#include <condition_variable>

using namespace std;

mutex mtx;

condition_variable cv;

bool flag1 = false;

bool flag2 = false;

void thread_func_1()

{

  {

    unique_lock<mutex> lock(mtx);

    flag1 = true;

    cv.notify_all();

  }

  // 执行线程1的任务

  cout << "Thread 1..." << endl;

  {

    unique_lock<mutex> lock(mtx);

    flag2 = true;

    cv.notify_all();

  }

}

void thread_func_2()

{

  {

    unique_lock<mutex> lock(mtx);

    if(!flag1)

    {

      cv.wait(lock);

    }

  }

  // 执行线程2的任务

  cout << "Thread 2..." << endl;

  {

    unique_lock<mutex> lock(mtx);

    if(!flag2)

    {

      cv.wait(lock);

    }

  }

}

int main()

{

  thread t1(thread_func_1);

  thread t2(thread_func_2);

  t1.join();

  t2.join();

  return 0;

}

在上面的示例中,我们创建了两个线程,其中一个线程(线程1)执行特定的任务,而另一个线程(线程2)等待线程1完成后执行自己的任务。为了确保线程的顺序执行,我们使用了一个互斥锁(mtx)和一个条件变量(cv)。我们还使用了两个布尔值(flag1和flag2),用于指示线程的执行状态。

在线程1开始执行时,它会设置flag1并通知条件变量。线程2会等待条件变量,并检查flag1是否为true。如果flag1为false,则线程2会等待,并释放互斥锁。一旦线程1执行完成,并将flag2设置为true时,线程2将被唤醒,并再次获取互斥锁。此时,flag2已经为true,线程2可以继续执行它的任务。

总的来说,使用互斥锁和条件变量可以确保C++多线程的顺序执行。通过等待条件变量和检查各个线程的状态,我们可以控制线程的执行顺序,并避免竞争条件和死锁等问题。

  
  

评论区

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