点 击 关 注 上方"两猿社"

设 为"置 顶 或 星 标",干 货 第 一时 间 送 达。

线程同步和异步的区别_线程同步_线程同步的3种方法

互 联 网 猿 | 两 猿 社

基础知识RAII信号量

信号量是一种特殊的变量,它只能取自然数值并且只支持两种操作:等待(P)和信号(V).假设有信号量SV,对其的P、V操作如下:

信号量的取值可以是任何自然数,最常用的,最简单的信号量是二进制信号量,只有0和1两个值.

以上,成功返回0,失败返回errno

互斥量

互斥锁,也成互斥量,可以保护关键代码段,以确保独占式访问.当进入关键代码段,获得互斥锁将其加锁;离开关键代码段,唤醒等待该互斥锁的线程.

以上,成功返回0,失败返回errno

条件变量

条件变量提供了一种线程间的通知机制,当某个共享数据达到某个值时,唤醒等待这个共享数据的线程.

功能锁机制的功能封装的功能

 1class sem{
2    public:
3        //构造函数
4        sem()
5        {
6            //信号量初始化
7            if(sem_init(&m_sem,0,0)!=0){
8                throw std::exception();
9            }
10        }
11        //析构函数
12        ~sem()
13        {
14            //信号量销毁
15            sem_destroy(&m_sem);
16        }
17    private:
18        sem_t m_sem;
19};

 1   //条件变量的使用机制需要配合锁来使用
2   //内部会有一次加锁和解锁
3   //封装起来会使得更加简洁
4   bool wait()
5   
{
6       int ret=0;
7       pthread_mutex_lock(&m_mutex);
8       ret=pthread_cond_wait(&m_cond,&m_mutex);
9       pthread_mutex_unlock(&m_mutex);
10       return ret==0;
11   }
12   bool signal()
13   
{
14       return pthread_cond_signal(&m_cond)==0;
15   }

如果本文对你有帮助,阅读原文star一下服务器项目,我们需要你的星星^_^.

完。

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注