G gzccjz Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-03 #1 客户端与服务端是多对一关系.服务端接收客户端发来的字符串存在一个数组里,并将这数组里的东西处理.但当第二个客户端连入时也将它发来的字符串存入这个数组,并覆盖了之前的内容.如何实现这个数组的多线程?有什么好办法吗?请高手指点.
客户端与服务端是多对一关系.服务端接收客户端发来的字符串存在一个数组里,并将这数组里的东西处理.但当第二个客户端连入时也将它发来的字符串存入这个数组,并覆盖了之前的内容.如何实现这个数组的多线程?有什么好办法吗?请高手指点.
L lake_cx Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-03 #2 没懂你的要求,把数值作为线程的成员变量,这样就保持各个线程数据的独立性,做到无状态的模式。把数组做为全局变量,就需要加上互斥对象,保证同一时刻只能有一个线程进行写入,这样就是有状态的模式,有状态的模式在线程增加之后会极大降低服务器的性能
没懂你的要求,把数值作为线程的成员变量,这样就保持各个线程数据的独立性,做到无状态的模式。把数组做为全局变量,就需要加上互斥对象,保证同一时刻只能有一个线程进行写入,这样就是有状态的模式,有状态的模式在线程增加之后会极大降低服务器的性能
K kkkchenA Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-03 #5 多线程的公共变量应该做线程安全方面的处理,具体的实现可以参考TThreadLlist的实现方式。
G gzccjz Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-04 #7 我是说.服务端的数组只有一个.但要接收多客户端连入.第二个客户端连上服务端后,若此时服务端还未处理完第一个客户端的时候.就会覆盖第一客户端留在这数组里的内容.怎么用多线程才能处理这种问题?
G godelphi2004 Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-04 #8 楼主是从来不认真看回贴??还是理解能力有问题??你这样子别人再怎么跟你说也是白搭。。。 lake_cx已经说了:把数值(也就是你的接收客户端发来的字符串的数组)作为线程的成员变量
G gzccjz Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-04 #9 to godelphi2004 :那你有没有看三楼的回贴? 不看回贴的好像是你.
G godelphi2004 Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-06 #10 靠!你TMD还真是理解能力有问题。。。先搞清楚什么是“无状态的模式”再来吧! 你这个鸟人,问问题还这种态度。。。
白 白河愁 Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-06 #11 多余,弄个record然后new一个出来就可以保证使用的空间独立了.
G gzccjz Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-06 #12 to godelphi2004:又不是问你,这里不欢迎你这样的人.自己又不会回答,专门捣乱.鄙视.满口脏话,练习一下自我修养再来吧.搞开发的,现在真是林子大了,什么鸟都有.估计杀人放火都有
M moshisoft Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-06 #13 这个问题应该是实时数据更新! 主要考虑的是“资源抢占”问题: 运行过程是这样: 1、接收数据; 2、检查是否有线程正在写入数据,这就需要分两步了; 21 Yes 22 No 211 读取线程信息 221 设置线处理标志,包括线程ID 212 通知线程,终止处理 | 213 等待回应 | (肯定要等,否则同时操作 | 同一地址会死机的) | | | ------------------------------------------------ 3、处理数据; 4、取消数据处理标志; 5、返回
这个问题应该是实时数据更新! 主要考虑的是“资源抢占”问题: 运行过程是这样: 1、接收数据; 2、检查是否有线程正在写入数据,这就需要分两步了; 21 Yes 22 No 211 读取线程信息 221 设置线处理标志,包括线程ID 212 通知线程,终止处理 | 213 等待回应 | (肯定要等,否则同时操作 | 同一地址会死机的) | | | ------------------------------------------------ 3、处理数据; 4、取消数据处理标志; 5、返回
G godelphi2004 Unregistered / Unconfirmed GUEST, unregistred user! 2007-08-06 #14 鄙视???连人家给你回答了都理解不了,你有资格鄙视别人吗???骂的就是你这种人的态度,好意提醒你一句居然说出这种话来了。 白河愁的方案估计你是理解不了的,new出来的空间你都不知道怎么用怎么释放了; 至于moshisoft的方案稍微复杂了一点儿,估计你是更加理解不了了,劝楼主还是别做程序员算了,去杀人放火算了,林子大了有你这种鸟也不奇怪了[][][]
鄙视???连人家给你回答了都理解不了,你有资格鄙视别人吗???骂的就是你这种人的态度,好意提醒你一句居然说出这种话来了。 白河愁的方案估计你是理解不了的,new出来的空间你都不知道怎么用怎么释放了; 至于moshisoft的方案稍微复杂了一点儿,估计你是更加理解不了了,劝楼主还是别做程序员算了,去杀人放火算了,林子大了有你这种鸟也不奇怪了[][][]
汾 汾阳仲王 Unregistered / Unconfirmed GUEST, unregistred user! 2007-10-09 #16 有这么复杂嘛,我觉得把那个数组做为临界区保护起来就可以了