其中的 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 。