岁月流转,往昔空明
C++博客
首页
新随笔
联系
聚合
管理
69 Posts :: 3 Stories :: 184 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔档案
(69)
2008年7月 (3)
2008年6月 (1)
2008年5月 (3)
2008年3月 (1)
2008年2月 (3)
2007年12月 (2)
2007年11月 (4)
2007年10月 (3)
2007年8月 (5)
2007年7月 (2)
2007年6月 (5)
2007年5月 (5)
2007年4月 (2)
2007年1月 (3)
2006年12月 (7)
2006年11月 (6)
2006年10月 (6)
2006年9月 (2)
2006年5月 (3)
2005年12月 (1)
2005年11月 (2)
文章分类
(3)
Tips,Tricks(1)
程序库实作
链接区
软件的蓝图(1)
数字魔方
心情故事
众乐乐(1)
转贴区
文章档案
(3)
2006年5月 (1)
2005年12月 (1)
2005年11月 (1)
收藏夹
(1)
图形学(1)
青青子衿
友情链接
Azure的专栏
3D技术挺好的,博客(网站?)有很多值得学习的例子.高人一名.
Flyingis的博客,GIS
GIS的高手,望尘莫及,努力学习中。
VCZH的博客
编译器小霸王,现在在Microsoft Search Tech Group实习
六水的主页
六水的主页,Inverse Kinematic,Ray Tracing, Photon Mapping皆有涉猎。强人。
我的心灵是一片湖蓝
我在GameRes上的Blog,经营了一段时间了。经常会翻翻以前的帖子,回味一下过去的快乐和悲伤。
最新随笔
1. SoftArt Shader Language Syntax EBNF
2. 开始写EBNF Grammar for SoftArt Shader Language
3. 再用Boost.Python
4. 一个3D骨骼动画 2D版超精简Demo,原理和实现几乎同3D一致
5. GPU Gems 3 Chapter 3 List 3.4的解释
6. 开个新的系列:GPU Gems 3 导读 + Chapter I 运用GPU构造复杂的过程化地形 导读(上)
7. 脚本编程琐话
8. 一个type2id的程序
9. 软件渲染器的项目已经在SF.NET上了
10. 设计模式小结(三)
搜索
积分与排名
积分 - 67402
排名 - 23
最新评论
1. re: 一个3D骨骼动画 2D版超精简Demo,原理和实现几乎同3D一致
@女巫
两个就没办法表现层次了。
--空明流转
2. re: 一个3D骨骼动画 2D版超精简Demo,原理和实现几乎同3D一致
这个问题还可以再精简,做成两个骨骼。我在OpenGL时遇到这样类似的问题。
--女巫
3. re: [翻译]CUDA:GPU计算的革命
INTEL是不是要失业了
--000
4. re: Windows界面程序的数年挣扎:经验与教训(三)
快毕业了 就急于求成 我也很矛盾
--沈臻豪(foxtail)
5. re: Windows界面程序的数年挣扎:经验与教训(二)
界面问题确实够人头痛一阵了
--沈臻豪(foxtail)
阅读排行榜
1. [翻译]CUDA:GPU计算的革命(2533)
2. 一个3D骨骼动画 2D版超精简Demo,原理和实现几乎同3D一致(1595)
3. ArcGIS Server 9.2 专题:ArcGIS Server 9.2架构分析 Slides(1584)
4. GPGPU C++用框架(4月21日更新)(1485)
5. boost 1.34.0(几乎是最糟糕的boost) 常见问题解答(1459)
评论排行榜
1. [转贴]构造可配置的词法分析器(已完结)(16)
2. ArcGIS Server 9.2 专题:ArcGIS Server 9.2架构分析 Slides(9)
3. 总结帖:为什么玩3D游戏会头晕?(9)
4. Windows界面程序的数年挣扎:经验与教训(一)(8)
5. [翻译]CUDA:GPU计算的革命(7)
使用boost.threads的condition构造的读写锁
没有什么实际意义(boost.threads已经加入了读写锁好像),只是说明一下condition的用法。
锁由Mutex和Lock构成。
Mutex是由condition实作而成的,Lock和ScopedLock区别不是很大,分读写锁而已。
以下是Mutex的代码
class
read_write_mutex
{
mutex mtx_;
int
read_cnt_;
condition cond_;
public
:
read_write_mutex(): read_cnt_(
0
)
{}
~
read_write_mutex()
{}
void
lock_read()
{
mutex::scoped_lock
lock
(mtx_);
while
(read_cnt_
<
0
)
{
cond_.wait(
lock
);
}
++
read_cnt_;
}
void
unlock_read()
{
mutex::scoped_lock
lock
(mtx_);
--
read_cnt_;
cond_.notify_all();
}
void
lock_write()
{
mutex::scoped_lock
lock
(mtx_);
while
(read_cnt_
!=
0
)
{
cond_.wait(
lock
);
}
read_cnt_
=
-
1
;
}
void
unlock_write()
{
mutex::scoped_lock
lock
(mtx_);
read_cnt_
=
0
;
cond_.notify_all();
}
}
;
以下是锁的代码
class
scoped_rlock
{
read_write_mutex
&
cond_;
public
:
scoped_rlock(read_write_mutex
&
c):cond_(c)
{cond_.lock_read();}
~
scoped_rlock()
{cond_.unlock_read();}
}
;
class
scoped_wlock
{
read_write_mutex
&
cond_;
public
:
scoped_wlock(read_write_mutex
&
c):cond_(c)
{cond_.lock_write();}
~
scoped_wlock()
{cond_.unlock_write();}
}
;
以下是测试用例:
int
top
=
0
;
int
stack[
1000
];
read_write_mutex rwc;
mutex io_mutex;
void
read(
int
val)
{
for
(
int
i
=
0
; i
<
20
;
++
i)
{
Sleep(
2
);
scoped_rlock rlock(rwc);
int
s
=
top;
{
mutex::scoped_lock
lock
(io_mutex);
cout
<<
"
read begin
"
<<
val
<<
endl;
}
Sleep(
10
);
{
mutex::scoped_lock
lock
(io_mutex);
cout
<<
"
read end
"
<<
val
<<
endl;
}
if
(s
!=
top)
{
cout
<<
"
error!
"
<<
endl;
}
}
}
void
write(
int
val)
{
for
(
int
i
=
0
; i
<
20
;
++
i)
{
Sleep(
2
);
scoped_wlock wlock(rwc);
{
mutex::scoped_lock
lock
(io_mutex);
cout
<<
"
write begin
"
<<
val
<<
endl;
}
Sleep(
5
);
{
mutex::scoped_lock
lock
(io_mutex);
cout
<<
"
write end
"
<<
val
<<
endl;
}
}
}
int
_tmain(
int
argc, _TCHAR
*
argv[])
{
thread_group rtg;
for
(
int
i
=
0
; i
<
10
;
++
i)
{
rtg.create_thread(boost::bind(
&
read, i));
}
for
(
int
i
=
0
; i
<
2
;
++
i)
{
rtg.create_thread(boost::bind(
&
write, i));
}
rtg.join_all();
system(
"
pause
"
);
return
0
;
}
别忘了头文件中:
#include
<
boost
/
thread.hpp
>
#include
<
boost
/
bind.hpp
>
#include
<
windows.h
>
#include
<
iostream
>
using
namespace
std;
using
namespace
boost;
posted on 2006-10-23 19:38
空明流转
阅读(400)
评论(0)
编辑
收藏
引用
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
Powered by:
C++博客
Copyright © 空明流转