线程同步的问题,找了很多相关的,没有结果,只好提出来(50分)

  • 主题发起人 主题发起人 ifeng
  • 开始时间 开始时间
真是辛苦ifeng了.看到这么多...伪高手在这里狂...
算了,你还是去找那本书吧.
至少候捷老师不会误有子..吧.
 
是我的帖子没有说清楚造成的,不过不要用那种自己心魔里的词汇来简单描述比较好,我在
下面帖子里,对我上面所说的,用讨论的形式作出补充,如果有什么不对,请指正。
 
这么热闹,进来听听!
 
其实两种办法都行的,不过觉得barton的有理,长了不少见识,支持!
 
-------------------------------------
来自:小雨哥, 时间:2003-7-5 4:24:00, ID:2004542
barton 啊,你又让我大大受益。 Delphi 5 的源代码里果然除了对 mutex 的定义和建立
外,没有一个地方使用的,真正佩服!
////////////////////// 原文 ////////////////////////
// 来自:ifeng, 时间:2003-7-4 13:42:00, ID:2002812
// to barton
// 看来你对线程挺了解的
////////////////////////////////////////////////////
什么是看来?该好好读读 barton 以前的全部帖子,何止是了解哦?
谢谢 barton 。
-------------------------------------
您没说清楚什么?好象您就说了这个吧?
 
假如利用了 mutex ,在代码里会创建一个 mutex 的,我利用文件搜索器查找 Delphi5
/Source 目录下的全部 pas 和 dpr 文件,搜索器使用的是 GExterps 带的 Grep.exe ,
关键字“mutex”,搜索的结果如下:
Windows.pas 出现 40 次。
IBSQLMonitor.pas 出现 4 次。
ScktSrvr.dpr 出现 1 次。
========= 讨论见下一贴(我事情比较多,只能断断续续)
 
不知道这些数据是否说明了“Delphi 5 的源代码里果然除了对 mutex 的定义和建立
外,没有一个地方使用的,真正佩服!”?
另外您把Semaphore的也找一次?找d7的行不行?我没d5可跟您对不上号。
 
疯子!!!我十分希望保持一个讨论的气氛来说明问题,看看你说的话,你这么厉害了,
你为什么不说出你的分析来?????我没有对上述东西做过检查,我会在这里说话??
是不是我们都是神经病,就你是一个好汉?大家都知道,Delphi7 使用了 indy 做为向
.net 发展的基础类,不管成功与否,和 Delphi5 有了很大的不同,我们看完的源码部分,
哪个不是基于 Delphi5 或更早的?你这么喜欢程口舌之快,好吧,你行!我不如你,行
了吧。
 
这么快就崩溃了?
我不明白您好想要我分析什么?
 
有点奇怪,既然你的线和A、B、C必须顺序执行,为何不归到一块去?
你的问题可以使用互斥变量解决
 
其中的 Windows.pas 中出现最多。看源代码的都知道, Windows.pas 是 MS 头文件的
Pascal 转换,也就是所谓的 API 函数,这里面除了对 mutex 进行声明外,就是创建和
消除等一系列 API 函数,类似:
function CreateMutexA;
external kernel32 name 'CreateMutexA';
function CreateMutexW;
external kernel32 name 'CreateMutexW';
function CreateMutex;
external kernel32 name 'CreateMutexA';
...............
没有一个是 VCL 调用,VCL 也不会在这里出现。检查了全部 40 个出现点,正如我这里
说明的。
那么,再来看 IBSQLMonitor.pas ,在它里面出现了 4 次,罗列如下:
const
MonitorHookNames: array[0..5] of String = (
'IB.SQL.MONITOR.Mutex', /// <----- 这里 1
FWriteLock := CreateMutex(nil, False, PChar(MonitorHookNames[0]));
// <- 这里 2
ReleaseMutex(FWriteLock);//<---- 这里 3
{
* 1. Wait to end the write until all registered readers have
* started to wait for a write event
* 2. Block all of those waiting for the write to finish.
* 3. Block all of those waiting for all readers to finish.
* 4. Unblock all readers waiting for a write event.
* 5. Wait until all readers have finished reading.
* 6. Now, block all those waiting for a write event.
* 7. Unblock all readers waiting for a write to be finished.
* 8. Unlock the mutex. // <-- 这里 4 是一个注解
}
也就是说 IBSQLMonitor.pas 中建立了互斥体,那它在做什么?这里高手众多,自己去看。
barton 说的正好在这里实现。
最后一个 ScktSrvr.dpr 一看就知道了。我不是 崩溃 ,兄弟,I 服了 YOU 。
 
楼主的问题应该早就可以解决了,有许多种方法,我也提供了一种。不过,和barton的
比起来,我们的方法实在太臭了!就楼主这个问题来说,真的不要再用到其他内核对象。
另外,大家在讨论问题时还是一团和气的好。技术上的东西,是即是,不是即不是,认
识到自己的不足,学习别人的长处才是正经啊。如果是灌水贴,大家想怎么灌就怎么灌,
但如果是技术贴子,大家还是以一个技术人员应有的虚心、求是精神来对待比较好。
 
barton 的一句 “完全不需要其它的内核对象”我就知道自己这个贴没白看。深深叹服中。
 
哈哈,笑死我了.
你在 http://www.delphibbs.com/delphibbs/dispq.asp?LID=755899干什么?
把Semaphore再分析,看看到底如何?
 
没完没了:)
 
ifeng,说了这么多了,应该差不多了吧?你还不结贴想让我们吵到什么时候?
再吵下去没有什么意义了吧.
把分给barton好了.当然我知道他是不会稀罕这些分的.
哈哈.
 
你这么牛的一个人,看完了说几句风凉话,牛得太透了耶,你不是书看得多吗,不是很清楚
Delphi 7 的源代码吗,你怎么不说几句让我等菜鸟羊膜一番哪,你为什么不来说点你牛野
似的论调?没水吧。空说逞皮子算哪门子好汉?老实对你说,你要能说出 Delphi 7 新改动
部分在哪里,为什么都不用你说,好坏都不用你分析,偶就服了你了,菜牛。
 
大半年不上dfw,好容易装了个宽带本.本也不想多呆太久,没想到一上来就踩到一pao狗屎.
**的还在汪汪叫.真TM恶心.
有人居然想从VCL中找线程安全例子,笑死我了.连VCL的本意都不清楚,还敢叫.
别以为在这里混个"脸熟"就可以成大侠,您天资可放在别的地方,朝别的方向努力吧.
ifeng想知道的,我已经说了自己的看法[看书].
至于你想知道的,开个300分,拿到手了我再到这解释给你听.想听免费的,没门!
 
你到现在还是没讲出一点东西,谁狗屎明摆着的,还 300 分,买你这堆狗屎?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部