免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2959 | 回复: 11
打印 上一主题 下一主题

问个多线程方面的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-30 13:53 |只看该作者 |倒序浏览
最近写一个程序,这个程序里面有个操作需要先begin 然后进行一些处理,后面调用end结束操作。
但是begin和end不能嵌套。
现在问题是,多线程的每个函数都要进行begin和end操作。但是还没想好一个方法能避免在两个线程里面同时调用begin和end的操作。
程序经常就稀里糊涂的就崩溃了。但是有时候会好好的工作上半天。
看看大家有什么好办法!

论坛徽章:
0
2 [报告]
发表于 2008-03-30 13:58 |只看该作者
上锁啊

论坛徽章:
0
3 [报告]
发表于 2008-03-30 14:00 |只看该作者
汗一个

论坛徽章:
0
4 [报告]
发表于 2008-03-30 14:03 |只看该作者

回复 #2 @sky 的帖子

上锁我知道。但是那样会导致程序慢的跟爬似的。

论坛徽章:
0
5 [报告]
发表于 2008-03-30 14:13 |只看该作者
原帖由 dinghwy 于 2008-3-30 14:03 发表
上锁我知道。但是那样会导致程序慢的跟爬似的。

多线程编程的临界区保护,不用锁还用什么? 还有比锁更加快的调度么?

不然就自己用管道模拟一个锁

创建管道

写入一个字节数据


线程主函数{

revc阻塞读取管道中的数据
临界区
send一个字节到管道中去


}


这样就能保证子线程们只有一个线程在执行临界区代码了


这是土办法~~~

不清楚你的程序的需求,也不好妄加评价~~

论坛徽章:
0
6 [报告]
发表于 2008-03-30 14:27 |只看该作者
原帖由 anthony1983 于 2008-3-30 14:13 发表

多线程编程的临界区保护,不用锁还用什么? 还有比锁更加快的调度么?

不然就自己用管道模拟一个锁

创建管道

写入一个字节数据


线程主函数{

revc阻塞读取管道中的数据
临界区
send一个字节 ...

begin和end是对屏幕显示缓冲区进行读写操作的开始和结束标志。
如果加锁,原来每70毫秒就要更新一次屏幕信息的函数就会使整个界面非常的卡。并且随时都有新的显示更新函数要调用。 加锁的话,导致程序变得非常的卡。这个程序原本是windows的,但是移植后,程序的架构已经不太适合现在的系统了。又不能改。主要是windows跟MAC的图形显示系统不太一样。
加锁是我最后的解决方法。

论坛徽章:
0
7 [报告]
发表于 2008-03-30 14:34 |只看该作者
原帖由 dinghwy 于 2008-3-30 14:27 发表

begin和end是对屏幕显示缓冲区进行读写操作的开始和结束标志。
如果加锁,原来每70毫秒就要更新一次屏幕信息的函数就会使整个界面非常的卡。并且随时都有新的显示更新函数要调用。 加锁的话,导致程序变得非 ...

LZ玩得傲啊·~~~WIN-->MAC了都,我还在命令行下敲 。。。

为什么加锁会导致慢呢? 难道单个线程占用锁的时间过长?

如果加锁操作占用临界区的操作时间过长的话,那么是否可以考虑将任务分割呢?

[ 本帖最后由 anthony1983 于 2008-3-30 14:37 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-03-30 20:04 |只看该作者
可以考虑将非线程安全部分缩小,只有在非加锁不可的时候再加。

论坛徽章:
0
9 [报告]
发表于 2008-03-30 20:57 |只看该作者
原帖由 cugb_cat 于 2008-3-30 20:04 发表
可以考虑将非线程安全部分缩小,只有在非加锁不可的时候再加。

确实要控制好锁的粒度,不然多线程的效率就会比较低了。opengl之类的东西不是有双缓存么,难道你多个线程同时访问显示缓存,我觉得像显示缓存这样的资源还是使用管程机制比较好,让每个请求写屏的线程排队等吧

论坛徽章:
0
10 [报告]
发表于 2008-03-30 21:52 |只看该作者
原帖由 apollolegend 于 2008-3-30 20:57 发表

确实要控制好锁的粒度,不然多线程的效率就会比较低了。opengl之类的东西不是有双缓存么,难道你多个线程同时访问显示缓存,我觉得像显示缓存这样的资源还是使用管程机制比较好,让每个请求写屏的线程排队等吧


我也在怀疑粒度可能太细了。导致大部分时间都在加锁解锁。实际的写屏操作太少。
给人的感觉就是移植程序比自己写程序都累。每个平台不同的特性实在不好把握。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP