社区
网络通信/分布式开发
帖子详情
[讨论]请问各位在设计服务端程序的时候,是怎么设计线程同步的呢?
Harryfin
2010-04-19 12:19:29
例如多个线程会竞争多片数据(也就是有多个锁),如何控制好锁的获取和释放,以避免死锁出现呢?
或者说碰到死锁的时候,怎样处理,以让服务继续执行呢?
希望能有具体可行的例子
...全文
152
24
打赏
收藏
[讨论]请问各位在设计服务端程序的时候,是怎么设计线程同步的呢?
例如多个线程会竞争多片数据(也就是有多个锁),如何控制好锁的获取和释放,以避免死锁出现呢? 或者说碰到死锁的时候,怎样处理,以让服务继续执行呢? 希望能有具体可行的例子
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
NoImagination
2010-07-08
打赏
举报
回复
你说的情景比较模糊。
首先,死锁问题,加锁不能加永久锁,设置一个超时时间,超时后做补充处理。
再有多线程多资源的匹配,封装式管理。以期限制线程访问资源的范围。
Harryfin
2010-04-27
打赏
举报
回复
顶起来再学习一下
hanzhongliqi
2010-04-24
打赏
举报
回复
我觉得可以用信号量很好的解决这个问题,借助AND型信号量集可以达到要么几个锁一起拿,要么一个不拿,把信号量机制和锁机制结合起来用。
Harryfin
2010-04-23
打赏
举报
回复
[Quote=引用 17 楼 sqldebug_fan 的回复:]
死锁这个问题应该从逻辑捋顺开始,可以试着把流程图画出来,然后在必须的地方加锁,如果害怕死锁,就在最外面加大互斥,会损失效率的。
总感觉这个问题应该捋逻辑。
[/Quote]
我感觉主要是管理锁的机制,我这贴的目的主要就是想讨论这方面的东西
SQLDebug_Fan
2010-04-23
打赏
举报
回复
死锁这个问题应该从逻辑捋顺开始,可以试着把流程图画出来,然后在必须的地方加锁,如果害怕死锁,就在最外面加大互斥,会损失效率的。
总感觉这个问题应该捋逻辑。
haitao
2010-04-23
打赏
举报
回复
不排队也是只能一个线程处理,别的都卡住的
Harryfin
2010-04-23
打赏
举报
回复
现在我的处理方法也是差不多,因为死锁怕了,所以就在实际开始访问的地方加个大互斥算了。不过感觉这样并发太差了。
haitao
2010-04-23
打赏
举报
回复
对,遇到瓶颈,并行也只能排队(串行化到队列)经过
areyouthere19
2010-04-23
打赏
举报
回复
我一般在需要处理数据的地方,弄成一个队列,类似消息队列一样,每次只处理一个。为了加快速度,只有处理数据的时候进去队列(前期预处理完才进入队列),处理完马上从队列中删除。
Harryfin
2010-04-23
打赏
举报
回复
up,请各位高手指点
Harryfin
2010-04-23
打赏
举报
回复
对锁的请求进行排队?这个我考虑过。
我觉得必须要保证锁请求的原子性,也就是要么几个锁一起拿,要么一个不拿。不然一个线程拿了A,一个拿了B,结果就大家都运行不了了。
另外想听听实际开发过的同学们的经验。
火龙岛主
2010-04-23
打赏
举报
回复
可以考虑排队机制!
浮生若梦_平淡为真
2010-04-23
打赏
举报
回复
是个好问题,应该推荐,学习``````
Harryfin
2010-04-21
打赏
举报
回复
up。。。。
SQLDebug_Fan
2010-04-20
打赏
举报
回复
加锁有个原则:尽可能在最开始需要加锁的地方加锁,完成操作后应该尽可能快解锁,锁里面处理的东西应尽可能少。
cumtiger
2010-04-20
打赏
举报
回复
不懂,等待高手解答
Harryfin
2010-04-19
打赏
举报
回复
[Quote=引用 7 楼 sanguomi 的回复:]
感觉没说清楚
不清楚你说的 多重互斥是个什么概念
[/Quote]
就是假设有ABC三片数据(三个锁),有些线程会去竞争AB锁,有些线程竞争BC锁,有些线程竞争ABC锁,然后线程才能执行。
sanguomi
2010-04-19
打赏
举报
回复
感觉没说清楚
不清楚你说的 多重互斥是个什么概念
bdmh
2010-04-19
打赏
举报
回复
其实不管你是锁线程还是锁数据,最终的结果就是同一时间只能有一个线程访问数据,访问结束后后面的线程才能读取,如果这样,你为什么不进行互斥呢,一个个的来,没有必要非得弄那些危险的方法
Harryfin
2010-04-19
打赏
举报
回复
[Quote=引用 4 楼 bdmh 的回复:]
线程不是可以加互斥吗,那样就可以执行完一个操作再执行下一个
[/Quote]
假如是需要存在多重互斥呢? 感觉处理不好就容易死锁
加载更多回复(4)
Qt项目实战之多线程Restful
服务端
开发(HTTPS)
Restful
服务端
是现在最流行的WebService。目前用的最多的就是tomcat。Qt是一款非常优秀的框架,本节课程使用Qt框架实现Restful风格的webservice。并且应用加载ssl后,服务的安全性得到提升。本视频教程全程干货,以
程序
员的视角、网络分析师的视角看问题。并且提供,如何将多线程的应用提升为高并发、多线程的思路。
C++多线程
程序
设计
经验
转自:http://blog.csdn.net/Solstice/article/details/5307710 本文主要讲我个人在多线程开发方面的一些粗浅经验。总结了一两种常用的线程模型,归纳了进程间通讯与
线程同步
的最佳实践,以期用简单规范的方式开发多线程
程序
。 文中的“多线程服务器”是指运行在 Linux 操作系统上的独占式网络应用
程序
。硬件平台为 Intel x64 系列的多核 CPU...
多线程服务器编程模型
本文主要讲我个人在多线程开发方面的一些粗浅经验。总结了一两种常用的线程模型,归纳了进程间通讯与
线程同步
的最佳实践,以期用简单规范的方式开发多线程
程序
。 文中的“多线程服务器”是指运行在 Linux 操作系统上的独占式网络应用
程序
。硬件平台为 Intel x64 系列的多核 CPU,单路或双路 SMP 服务器(每台机器一共拥有四个核或八个核,十几 GB 内存),机器之间用百兆或千兆以太网连接。
boost::thread简要分析(2):
线程同步
除了thread,boost::thread另一个重要组成部分是mutex,以及工作在mutex上的boost::mutex::scoped_lock、condition和barrier,这些都是为实现
线程同步
提供的。 mutex boost提供的mutex有6种: boost::mutex boost::try_mutex boost::timed_mutex boost::recu
游戏
服务端
究竟解决了什么问题?
转自:http://www.yilan.io/article/5775f60463da75a05a5dcd95 1.写在前面 既然是游戏
服务端
程序
员,那博客里至少还是得有一篇跟游戏
服务端
有关的文章,今天文章主题就关于游戏
服务端
。写这篇博客之前也挺纠结的,一方面是因为游戏
服务端
其实不论架构上还是具体一些逻辑模块的构建,都属于非常成熟的技术,举个简单的例子,像端游的多zone/scene/ga
网络通信/分布式开发
1,593
社区成员
32,964
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章