如何实现这个多线程?高手请进 ( 积分: 100 )

  • 主题发起人 主题发起人 gzccjz
  • 开始时间 开始时间
G

gzccjz

Unregistered / Unconfirmed
GUEST, unregistred user!
客户端与服务端是多对一关系.服务端接收客户端发来的字符串存在一个数组里,并将这数组里的东西处理.但当第二个客户端连入时也将它发来的字符串存入这个数组,并覆盖了之前的内容.如何实现这个数组的多线程?有什么好办法吗?请高手指点.
 
没懂你的要求,把数值作为线程的成员变量,这样就保持各个线程数据的独立性,做到无状态的模式。把数组做为全局变量,就需要加上互斥对象,保证同一时刻只能有一个线程进行写入,这样就是有状态的模式,有状态的模式在线程增加之后会极大降低服务器的性能
 
怎样实现无状态模式?能发一段这方面的代码吗?谢谢
 
多线程的公共变量应该做线程安全方面的处理,具体的实现可以参考TThreadLlist的实现方式。
 
没明白楼主什么意思
 
我是说.服务端的数组只有一个.但要接收多客户端连入.第二个客户端连上服务端后,若此时服务端还未处理完第一个客户端的时候.就会覆盖第一客户端留在这数组里的内容.怎么用多线程才能处理这种问题?
 
楼主是从来不认真看回贴??还是理解能力有问题??你这样子别人再怎么跟你说也是白搭。。。

lake_cx已经说了:把数值(也就是你的接收客户端发来的字符串的数组)作为线程的成员变量
 
to godelphi2004 :那你有没有看三楼的回贴? 不看回贴的好像是你.
 
靠!你TMD还真是理解能力有问题。。。先搞清楚什么是“无状态的模式”再来吧!
你这个鸟人,问问题还这种态度。。。
 
多余,弄个record然后new一个出来就可以保证使用的空间独立了.
 
to godelphi2004:又不是问你,这里不欢迎你这样的人.自己又不会回答,专门捣乱.鄙视.满口脏话,练习一下自我修养再来吧.搞开发的,现在真是林子大了,什么鸟都有.估计杀人放火都有
 
这个问题应该是实时数据更新!
主要考虑的是“资源抢占”问题:
运行过程是这样:
1、接收数据;
2、检查是否有线程正在写入数据,这就需要分两步了;
21 Yes 22 No
211 读取线程信息 221 设置线处理标志,包括线程ID
212 通知线程,终止处理 |
213 等待回应 |
(肯定要等,否则同时操作 |
同一地址会死机的) |
| |
------------------------------------------------
3、处理数据;
4、取消数据处理标志;
5、返回
 
鄙视???连人家给你回答了都理解不了,你有资格鄙视别人吗???骂的就是你这种人的态度,好意提醒你一句居然说出这种话来了。

白河愁的方案估计你是理解不了的,new出来的空间你都不知道怎么用怎么释放了;
至于moshisoft的方案稍微复杂了一点儿,估计你是更加理解不了了,劝楼主还是别做程序员算了,去杀人放火算了,林子大了有你这种鸟也不奇怪了[:D][:D][:D]
 
同意godelphi2004的观点
 
有这么复杂嘛,我觉得把那个数组做为临界区保护起来就可以了
 
后退
顶部