点 击 关 注 上方"两猿社"
设 为"置 顶 或 星 标",干 货 第 一时 间 送 达。
互 联 网 猿 | 两 猿 社
基础知识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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。