码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-11 10:32:08      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

  原理分析:

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

执行完毕,用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将直接创建一个新的互斥对象,下个例子将会有名字

 


  本例的效果图

技术分享

  代码如下

 

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

标签:

原文地址:http://www.cnblogs.com/xumenger/p/4493775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!