多线程同步之 Mutex (互斥对象)

原理分析:

  互斥对象是系统内核对象, 各线程都可以拥有它, 谁拥有谁就能执行;

  执行完毕, 用 ReleaseMutex 函数释放拥有权, 以让其他等待的线程使用.

  其他线程可用 WaitForSingleObject 函数排队等候(等候也可以理解为排队申请).

  使用过程:

var hMutex: THandle; {应该先声明一个全局的互斥句柄}
CreateMutex     {建立一个互斥对象}
WaitForSingleObject {用等待函数排队等候}
ReleaseMutex     {释放拥有权}
CloseHandle     {最后释放互斥对象}

  ReleaseMutex、CloseHandle 的参数都是 CreateMutex 返回的句柄, 关键是 CreateMutex 函数:

function CreateMutex(
 lpMutexAttributes: PSecurityAttributes;
 bInitialOwner: BOOL; {是否让创建者(此例中是主线程)拥有该互斥对象}
 lpName: PWideChar  {可以给此互斥对象取个名字, 如果不要名字可赋值为 nil}
): THandle;
{
1、第一个参数前面说过.
2、第二个参数在这里一定要是 False, 如果让主线程拥有互斥, 从理论上讲, 得等程序退出后其他线程才有机会;
  取值 False 时, 第一个执行的线程将会最先拥有互斥对象, 一旦拥有其他线程就得先等等.
3、第三个参数, 如果给个名字, 函数将从系统中寻找是否有重名的互斥对象, 如果有则返回同名对象的存在的句柄;
  如果赋值为 nil 将直接创建一个新的互斥对象; 下个例子将会有名字. }

  本例效果图:

  多线程编程(10) - 多线程同步之 Mutex (互斥对象)

转自:http://dev.21tx.com/2009/02/16/13582.html

posted @ 2012-05-07 18:25  stma  阅读(470)  评论(0)    收藏  举报