请教CreateMutex函数的第二个参数bInitialOwner的具体作用,好像设置成False和True效果都是一样的(20)

  • 主题发起人 主题发起人 BiPigBen1001
  • 开始时间 开始时间
B

BiPigBen1001

Unregistered / Unconfirmed
GUEST, unregistred user!
可以调用函数CreateMutex ( )来创建一个互斥量。下面是函数的声明:  function   lpMutexAttributes参数为一个指向TSecurityAttributtes记录的指针。此参数通常设为0,表示默认的安全属性。 bInitialOwner:指定互斥对象是否拥有所有者标识。值为true时,程序创建的CreateProcess 方法能够继承互斥对象句柄。   lpName参数指定互斥对象的名称。设为nil表示无命名,如果参数不是设为nil,函数会搜索是否有同名的互斥对象存在。如果有,函数就会返回同名互斥对象的句柄。否则,就新创建一个互斥对象并返回其句柄。bInitialOwner具体什么作用啊,好像用True和False效果都一样,望高手指教
 
首先你应该知道一个知识,互斥对象是一个内核对象,这个内核对象中有两个特殊的域,一个是用来保存哪个线程当前正拥有这个互斥对象,另一个域是一个递归计数器。当互斥对象的用来保存线程ID的域为0时,表示这个互斥对象没有被任何线程拥有,换句话说,任何一个进程中的线程调用wait函数时,都会马上返回,并将自己的线程ID设置到互斥对象的这个域当中和设置递归计数器的值为1,这时候,如果有其他的线程调用wait等待这个互斥对象时,那么这个线程就会被挂起,直到这个互斥对象用来保存线程ID的域为0时为止。这里面有一个特殊情况,就是,在调用wait函数等待互斥对象时,如果系统发现调用wait的线程ID和互斥对象中保存的线程ID相等,则会马上返回而不是挂起等待,这时候,返回的同时,系统会让互斥对象的递归计数器加1。你上面说的感觉bInitialOwner参数没有用,那是因为你在同一个线程中调用了wait函数,所以你觉得好像没用,如果你在不同的线程中去等待这个互斥对象,你就知道这个参数是有用的了
 
谢谢放飞高手的热心回答,在此谢谢了!
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部