博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi线程同步
阅读量:5836 次
发布时间:2019-06-18

本文共 1170 字,大约阅读时间需要 3 分钟。

总结一下Windows常用的几种线程同步技术。

1.Critical Sections(临界段),源代码中如果有不能由两个或两个以上线程同时执行的部分,可以用临界段来使这部分的代码执行串行化。它只能在一个独立的进程或一个独立的应用程序中使用。使用方法如下:

//在窗体创建中
InitializeCriticalSection(Critical1)
//
在窗体销毁中
DeleteCriticalSection(Critical1)
//
在线程中
EnterCriticalSection(Critical1)
……
保护的代码
LeaveCriticalSection(Critical1)

2.Mutex(互斥对象),是用于串行化访问资源的全局对象。我们首先设置互斥对象,然后访问资源,最后释放互斥对象。在设置互斥对象时,如果另一个线程(或进程)试图设置相同的互斥对象,该线程将会停下来,直到前一个线程(或进程)释放该互斥对象为止。注意它可以由不同应用程序共享。使用方法如下:

//在窗体创建中
hMutex:=CreateMutex(nil,false,nil)
//
在窗体销毁中
CloseHandle(hMutex)
//
在线程中
WaitForSingleObject(hMutex,INFINITE)
……
保护的代码
ReleaseMutex(hMutex)

3.Semaphore(信号量),它与互斥对象相似,但它可以计数。例如可以允许一个给定资源同时同时被三个线程访问。其实Mutex就是最大计数为一的Semaphore。使用方法如下:

//在窗体创建中
hSemaphore:=CreateSemaphore(nil,lInitialCount,lMaximumCount,lpName)
//在窗体销毁中
CloseHandle(hSemaphore)
//
在线程中
WaitForSingleObject(hSemaphore,INFINITE)
……
保护的代码
ReleaseSemaphore(hSemaphore, lReleaseCount, lpPreviousCount) 
4.还可以使用Delphi中的TcriticalSection这个VCL对象,它的定义在Syncobjs.pas中。

当你开发多线程应用时,并且多个线程同时访问一个共享资源或数据时,你需要考虑线程同步的问题了。

 

详情:http://www.cnblogs.com/enli/archive/2008/06/27/1231340.html

posted on
2015-08-12 14:51 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/devinblog/p/4724344.html

你可能感兴趣的文章
iOS 9.0之后NSString encode方法替换
查看>>
解决 ThinkPHP5 无法接收 客户端 Post 传递的 Json 参数
查看>>
ASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix). (文档 ID 2034681.1)
查看>>
CRM Transaction处理中的权限控制
查看>>
[转]linux创建链接文件的两种方法
查看>>
python ipaddress模块使用
查看>>
文件权限
查看>>
busybox里的僵尸进程为何那么多
查看>>
python debug
查看>>
java 连接数据库之一个完整的函数
查看>>
mysql脚本
查看>>
OllyDBG 入门系列教学--让你瞬间成为破解高手
查看>>
Dubbo点滴(2)之集群容错
查看>>
检测不到兼容的键盘驱动程序
查看>>
listbox用法
查看>>
冲刺第九天 1.10 THU
查看>>
传值方式:ajax技术和普通传值方式
查看>>
Linux-网络连接-(VMware与CentOS)
查看>>
寻找链表相交节点
查看>>
AS3——禁止swf缩放
查看>>