21xrx.com
2024-12-23 00:50:48 Monday
登录
文章检索 我的文章 写文章
C++多线程: 条件变量简介
2023-07-01 21:30:10 深夜i     --     --
C++ 多线程 条件变量

C++是一种高级编程语言,其多线程技术可以让程序在同时发生多个任务时更加高效。条件变量是多线程编程中重要的一部分,它可以实现线程之间的同步和互斥。

条件变量常常与锁结合使用。锁用来保护共享数据的访问,而条件变量则用来通知线程在某些条件下开始执行操作。线程可以等待条件变量的变化,当条件变量发生变化时,线程便会被唤醒执行任务。

在C++中,条件变量通常使用std::condition_variable类实现。实现代码如下:


std::condition_variable cv;

std::mutex cv_m;

void thread_func()

{

  std::unique_lock<std::mutex> lk(cv_m);

  cv.wait(lk); // 等待条件变量唤醒

  // 执行任务

}

void main_thread_func()

{

  {

    std::lock_guard<std::mutex> lk(cv_m);

    // 修改共享数据

  }

  cv.notify_one(); // 唤醒一个等待的线程

  // 继续执行主线程任务

}

在上面的代码中,std::condition_variable对象cv和std::mutex对象cv_m共同使用,实现了线程之间的同步。在线程函数thread_func()中,std::unique_lock 对象lk保证了线程对共享数据的访问是排他的,一旦等待条件变量的线程被唤醒,便可以开始执行任务。在主线程函数main_thread_func()中,std::lock_guard 对象lk保护了共享数据的修改,当修改完成后,通知等待条件变量的线程用cv.notify_one(),唤醒一个线程开始执行任务。

总的来说,C++中的条件变量是多线程编程的一种强大工具,它可以让线程实现同步和互斥,提高程序的执行效率和并发性。对于需要同时处理多个任务的程序来说,使用条件变量是一种很好的选择。

  
  

评论区

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