muduo源码解析6-condtion类
2024-09-06 12:27:46
condition
class condition:noncopyable
{
};
作用:
实现了最简单condtion操作,包括init,destroy,wait,notify,notifyAll,waitforseconds操作,
内部数据也很简单,mutexlock& m_mutex和pthread_cond_t m_cond
使用方法和std::cond一样
成员变量:
private:
mutexlock& m_mutex;
pthread_cond_t m_cond;
成员函数:
public:
explicit condition(mutexlock& mutex):m_mutex(mutex)
{
pthread_cond_init(&m_cond,NULL);
}
~condition()
{
pthread_cond_destroy(&m_cond);
}
//不满足条件时wait,把mutexlock中m_holder移除,同时该线程释放该锁
void wait()
{
mutexlock::UnassignGuard ug(m_mutex);
pthread_cond_wait(&m_cond,m_mutex.getPthreadMutex());
} //等待一段时间而不是一直等待
bool waitForSeconds(double seconds); //唤醒cond阻塞队列中的第一个线程
void notify()
{
pthread_cond_signal(&m_cond);
} //唤醒cond阻塞队列中的所有线程
void notifyAll()
{
pthread_cond_broadcast(&m_cond);
}
测试:
使用condtion和mutex完成一个生产者消费者同步的小例子。
#include"base/mutex.h"
#include"base/condition.h"
#include<thread>
#include <stdio.h>
#include<queue>
#include<iostream> #define MAXQUEUE 5
mymuduo::mutexlock mutex;
mymuduo::condition cond(mutex);
std::queue<int> task_queue; namespace mymuduo{
namespace currentthread { void cacheTid()
{
}
}
} void provider()
{
while()
{
std::this_thread::sleep_for(std::chrono::milliseconds());
mymuduo::mutexlockguard mlg(mutex);
while(task_queue.size()>=MAXQUEUE)
cond.wait();
task_queue.push(rand()%);
std::cout<<"push "<<task_queue.front()<<std::endl;
cond.notifyAll();
}
} void consumer()
{
while()
{
mymuduo::mutexlockguard mlg(mutex);
while(task_queue.empty())
cond.wait();
std::cout<<"pop "<<task_queue.front()<<std::endl;
task_queue.pop();
cond.notifyAll();
}
} int main()
{
std::thread t[];
t[]=std::thread(provider);
t[]=std::thread(consumer); t[].join();t[].join();
}
最新文章
- ListView 刷新加载控件
- LOL
- Python for Informatics 第11章 正则表达式一(译)
- 孙鑫视频学习:对第10章设置线宽时为什么不调用UpDateData(TRUE)的理解
- CSS中控制换行的四种属性
- Python基础05 缩进和选择
- BNUOJ-26476 Doorman 贪心
- POJ2676 Sudoku(dfs)
- 单片机 认识HEX文件
- js跨域总结
- selenium 环境搭建
- NetCore2.0技术文章目录
- 小米Note 2简单卡刷开发版启用root超级权限的步骤
- python学习:修改字符串大小写
- iptables介绍
- openpyxl一点心得
- (网页)bootstrap模态框手动关闭(转)
- NodeJS的优缺点
- C与指针练习题4.14.1
- [记录] CSS 左边元素定长,右边元素获得剩余长度