没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
本文从典型的 设计模式入手从一个新的视角来探讨 语言的同
步机制
本文将从两个方面进行阐述:
、使用 语言来描述 设计模式对于这样一个典型的模式做
了很好的语言层面的封装因此对于 的开发者来说很多关于该模式本身的东西被屏蔽
掉了本文试图使用 语言帮助读者从本质上对 设计模式有一个
更全面的认识
、结合 版本的 设计模式引领读者对于 同步机制有一个更
深刻的认识帮助读者正确有效地使用 同步机制
预备知识
在开始正式讨论之前需要了解一些预备知识
什么是
资源获取即初始化()是指在一个对
象的构造函数中获得资源 并且在该对象的析构函数中释放它这个资源可以是对象、内存、
文件句柄或者其它类型实现这种功能的类我们就说它采用了资源获取即初始化()
的方式是一种很典型的语言惯用法被很多的 语言所使用下面是 的例子
清单
!
"#
$$%"&'&
()*
#+,"()*!
+,"-.(*/
0
$$&1&&2 3"
4(*!
+,"-.(*/
0
"#
$$&15+
6+,"/
$$+7''1"7 ' +
0/
使用 的好处是:析构函数由系统自动调用这样可以帮助我们自动地隐式释放我们所
获取的资源事情上我们熟知的很多 技术都用到了这一设计模式比如:智能指针
(%+)以及我们接下来要讨论的范围锁 (%"'89)
不同于 对象没有析构函数%7+提供了 :来管理内存资源而对于
像数据库连接%9这样类型的资源提供了 ;() 来处理但是请注
意的 ;与 的析构函数是不同的;() 函数由 :异步地在某个恰
当的时候调用我们不能等同地使用 ;() 来实现 里的 通常的做法是使用
提供的 ;7语句块
清单
7</
7!
<17(*/
$$&
0
;7!
$$2"&
3(=<*!(*/0
0
什么是区域锁 (%"'89)
区域锁是指线程执行进入一个区域时一个锁将自动被获取当该线程执行离开这个区
域时这个锁将被自动释放区域锁的实现使用了 技术 实现如下
清单 >%"'89
+"?8@.
:'!
"#
$$%"&9'&9
:'(8@)9*
#+,"89()9*+,1(3*!
+,"89-.(*/
+,1</
0
$$&91&& ' 3"
$$73?.''
4:'(*!
3(+,1*+,"89-.(*/
0
"#
$$&915+
8@6+,"89/
$$'3&9&'7&
+,1/
$$+7''1"7 ' +
0/
:'是一个模板类8@类型指的是对操作系统提供的线程锁的抽象比如在
A'1平台上8@可以是对 B8,%CB的封装
对于区域锁模式在语言层面上已经做了封装所以对于 开发者来说不必像
这样来开发自己的区域锁类这就是我们所熟知的 7&'关键字
清单 D%"'89
""'89%+"(*!
7&'(&*!
7!
$$'+19E
0&(7C2"*!
$$'92"7
-/
0&(7C2"*!
$$'92"7
-/
0
$$&2"&'
0
F/
}
7&'保证在进入该区域后获得对象锁不管最终该函数从哪里退出该对象
锁都会被正确释放
什么是条件变量 ('G)
条件变量通常被一个线程用于使自己等待直到一个涉及共享数据的条件表达式到达特
定的状态当另外的协作线程指示共享数据的状态已发生变化调度器就唤醒在该条件变量
上挂起的线程于是新唤醒的线程重新对它的条件表达式进行求值如果共享数据已到达合
适状态就恢复处理以下是条件变量的 实现
清单 HB&''
B&','!
"#
$$&''1&&";'9
B&','(B&',2)+*
#+,2(+*!
',()',%I,BJCKF*/
0
$$K7&'
4B&','(*!
','7()',*/
0
$$A3&?B&','.;'
$$?+.&"'
$$3?+.<<F&1';7
'1(B+,G6+<F*!
',+'1()',)+,2+,9+<<FLF#
+-.+(**/
0
$$37&'1 ?B&','.
'37(*!', ()',*/0
$$37&'1 ?B&','.
'37,(*!','()',*/
剩余11页未读,继续阅读
资源评论
liangxg
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功