netwind下课!这个问题是怎么结束的?!误导消费者啊!
netwind下课!netwind下课!netwind下课!netwind下课!
----------------------------------------------------------------
pipi.-100分。他的回答是这样的:
1. 既然是全局变量,那当然是要给大家访问的了,怎么能说被别人破坏?
最多说要“避免同时访问(写入)”
2. 如果是不能给别人访问的,那就不要用全局变量了
3. g622,你那个同步方式真是糟糕,在并发高的多线程中没有用处。
private和 public 没有什么区别,关键你放哪里了
第一个回答试图纠正概念错。其实当一个变量(内存地址)被两个线程同时访问时,其中
一个读取了值,试图修改,而同时另一个线程已经写入了新的修改值。这种情况理解为
变量被破坏是无尝不可的。在多线程中,这叫冲突。
第二个回答无价值。
第三个回答前半部分我基本同意。后半部分是错的。——谁敢说没有区别?!回家再去
读读OOP!前半部分的回答有些问题,g622用的方式是线程同步中的“设置标志量”,其
实也是M$所谓的一种正常方法,没有什么不可以用的,只是效率太差。
----------------------------------------------------------------
wwwsys-50分。他的回答是这样的:
我想有两种方法.
1,通过私有的属性,比如tag等携带.
2,并发处理,我想线程互斥比较安全.
第一种:不明白。定义成私有变量就不会被破坏了,定义成TWebModule的一个类
属性也成的。
第二种。没错。互斥是使用低效率来保障安全性的方法,但,别无它法。
----------------------------------------------------------------
g622-50。他的回答是使用信号量(标志量)来达到同步。是一个正确有效的方法。
====================================================================
g622-50多少也算提供了一种正确的方法,应该100分。pipi最多算参与讨论而已嘛!
其实这个问题很简单。在ISAPI中,每一个请求打开一个ISAPI线程,如果定义成threadvar,
就不会被其它连接破坏了。如果还要想安全的话,可以定义成TWebModule的一个类
属性。但要注意的是,由于ISAPI的上一次请求的线程状态被保存,所以需要在开始
使用它时重置变量。
如果你想将变量定义成全局的,所有的连接请求都能够访问,那么为了避免冲突。你
应该使用同步。基本思路可以参见我在上面一个贴子中的答案。
有关多线程同步的技术可以参见机械工业出版社今年五月出的《Windows核心编程》。
---------------------------------------------------------------------------
netwind下课!netwind下课!netwind下课!netwind下课!
netwind下课!netwind下课!netwind下课!netwind下课!
netwind下课!netwind下课!netwind下课!netwind下课!
netwind下课!netwind下课!netwind下课!netwind下课!
还是不下课吧。要不这个版就没人管了,不过你也得有点儿专业精神啊! ^-^