webrtc的锁
来源:互联网 发布:适合20岁用的香水知乎 编辑:程序博客网 时间:2024/06/05 14:47
1,多线程访问同一个变量,需要加锁。
2,锁是一种资源,需要做好加锁和解锁相对应,创建和释放相对应。
当需要向一个消息队列(消息队列中有一个CriticalSection类型的锁)添加消息的时候,我们的通常做法如下:
Void MessageQueue::Add(Message* msg)
{
m_pCrit->Lock();//加锁
message_queues_.push_back(msg);
m_pCrit->UnLock();//解锁
}
这样的代码就很容易出现当push_back出现异常的时候,m_pCrit没有被解锁,导致资源有问题。
这仅仅是一个例子,push_back一般不会出现异常,但是不能保证我们中间可能写了很多处理代码,难免不会有异常发生。
一旦发生,函数如果跳出,锁资源就不会被释放了。
Webrtc采用的方案:
Void MessageQueue::Add(Message* msg)
{
CritScope cs(&m_pCrit);//定义一个临时变量cs,它的构造函数中负责加锁,析构函数负责解锁。
message_queues_.push_back(msg);
//函数退出的时候,cs被释放,自动调用析构函数解锁
}
采用这种方式,可以保证资源一定会被正常的释放,即使中间代码出现异常,cs变量的析构函数还是会被正常调用的。
这种可能会对我们经常资源管理出现问题有些帮助。
- webrtc的锁
- webrtc的锁,便于后记
- webrtc关于锁的编程思想
- webrtc (4) OpenWebrtc和Webrtc的关系
- webrtc--AudioProcessing的使用
- WebRTC的应用示例
- webrtc的scoped_ptr
- webrtc--AudioProcessing的使用
- webrtc--AudioProcessing的使用
- WebRTC的问题
- WebRTC学习的方方面面
- github上的webrtc
- webRTC的用户体验
- WebRTC的优缺点
- webrtc的编译
- 梦幻般的webrtc
- 梦幻般的webrtc
- WebRTC服务器的配置
- Linux终端的几个常用快捷方式,记下!
- 开发app 积累
- 三范式数据库设计和反范式的思考(转)
- 页用JavaScript验证函数
- Java SE复习笔记64
- webrtc的锁
- Andriod Studio虚拟机启动失败解决方案
- 怎么设置路由器当交换机用
- ios NSTimer做的计时器(精确到微妙)
- c# API大全(三)
- Silverlight常见问题解决方法
- 关于Sigmoid函数
- 10 个迅速提升你 Git 水平的提示
- Virtualbox ubuntu & windows 共享文件