

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
在多线程工作中,线程同步是绕不过的一个问题。线程同步的方式主要有互斥量、临界区、原子操作等,本文主要研究信号量在线程同步中的作用。
信号量的实质是一把数据锁,本身并不具备数据传递的功能。但我在实际使用中,常常会需要在发送一个通知的同时,传递数据给线程,因此就希望能让信号量拥有数据传递的能力。
1. condition_variable和mutex
c++11中,本身便提供了很方便的信号量实现方案,即利用条件变量condition_variable和互斥量mutex,来实现信号量。
我们一步步来,首先来一个最简单的:
#include <condition_variable>
class cv_reusable_semaphore
{
public:
cv_reusable_semaphore()
{}
~cv_reusable_semaphore()
{}
void wait()
{
#ifdef USE_RECURSIVE_MUTEX
std::unique_lock<std::recursive_mutex> lock(m_recursive_mutex);
#else
std::unique_lock<std::mutex> lock(m_mutex);
#endif
m_cv.wait(lock);//*注释1
}
void notify_all()
{
#ifdef USE_RECURSIVE_MUTEX
std::unique_lock<std::recursive_mutex> lock(m_recursive_mutex);
#else
std::unique_lock<std::mutex> lock(m_mutex);
#endif
m_cv.notify_all();
}
void notify_one()
{
#ifdef USE_RECURSIVE_MUTEX
std::unique_lock<std::recursive_mutex> lock(m

最低0.47元/天 解锁文章
_c+,C C++框架&spm=1001.2101.3001.5002&articleId=138813391&d=1&t=3&u=4b009f43701c4b8996d054bcab5ce576)
8209

被折叠的 条评论
为什么被折叠?



