Delphi中最常用的三种线程同步技术
来源:互联网 发布:苹果加密软件 编辑:程序博客网 时间:2024/04/30 13:00
最近在做数据模块缓冲池中就需要用到线程同步的技术,也就顺便用简约的篇幅总结了Delphi中最常用的三种线程同步技术。
1.Critical Sections(临界区)
代码中如果有不能由两个或两个以上线程同时执行的部分,可以用临界区来使这部分的代码执行串行化。
它只能在一个独立的进程或一个独立的应用程序中使用。
使用方法如下:
//申明
var
oCSect: TCriticalSection; // 临界区对象,保证多线程时存取数据模块的安全
//创建
oCSect := TCriticalSection.Create;
//进入临界区
oCSect.Enter;
try
dosomething...//保护的代码
finally
//离开临界区
oCSect.Leave;
end;
//释放临界区
oCSect.Free;
2.Mutex(互斥对象)
是用于串行化访问资源的全局对象。我们首先设置互斥对象,然后访问资源,最后释放互斥对象。在设置互斥对象时,如果另一个线程(或进程)试图设置相同的互斥对象,该线程将会停下来,直到前一个线程(或进程)释放该互斥对象为止。注意它可以由不同应用程序共享。
使用方法如下:
//申明
hMutex: HWND;
//创建
hMutex:=CreateMutex(nil,false,nil);
try
WaitForSingleObject(hMutex,INFINITE);
dosomething...//保护的代码
finally
ReleaseMutex(hMutex);
end;
//销毁
CloseHandle(hMutex)
3.Semaphore(信号量)
它与互斥对象相似,但它可以计数。例如可以允许一个给定资源同时同时被三个线程访问。其实Mutex就是最大计数为一的 Semaphore。
使用方法如下:
//申明
hSemaphore: THandle; // 并发许可数句柄
//建立信号灯 创建对象时指定最大可同时访问的线程数
//CreateSemaphore(lpSemaphoreAttributes As SECURITY_ATTRIBUTES,
// ByVal lInitialCount As Long, ByVal lMaximumCount As Long, ByVal lpName As String);
hSemaphore:= CreateSemaphore(nil,lInitialCount,lMaximumCount,lpName)
try
WaitForSingleObject(hSemaphore,INFINITE);
dosomething...//保护的代码
finally
ReleaseSemaphore(hSemaphore, lReleaseCount, lpPreviousCount)
end;
//销毁
CloseHandle(hSemaphore)
当开发多线程应用时,并且多个线程同时访问一个共享资源或数据时,你是不是也该考虑线程同步的问题了?
- Delphi中最常用的三种线程同步技术
- Delphi中最常用的三种线程同步技术
- 实际编程中常用的线程同步技术【C#,C++】
- 事件是在线程同步中最常用的一种同步对象,可手动自动状态。
- 总结一下Windows常用的几种线程同步技术。
- VC中利用多线程技术实现线程之间的通信(三)---线程之间的同步
- 多线程编程中 线程同步的三种方式
- JAVA中线程同步的常用方法
- WebWork中最常用的三种标签
- Delphi中网络实现线程变量同步
- 三种线程间的同步
- 三种线程同步方式的比较
- Linux 线程同步的三种方法
- 线程的三种同步机制
- Linux 线程同步的三种方法
- linux 线程同步的三种方法
- Linux 线程同步的三种方法
- Linux 线程同步的三种方法
- 动态页面静态化的处理类
- 相对最完整的软件测试工具手册
- 成为JAVA高手的几个好的方法
- 相对最完整的软件测试工具手册
- 关于数据库持久层操作的开源项目
- Delphi中最常用的三种线程同步技术
- 软件评估--->Bug的价值(产品市场角度分析)
- 祝小东西生日快乐!
- 测试资源:63个国外优秀测试站点链接
- 软件评估---Bug的价值(生产过程分析)
- 一个基于Yahoo UI的Ajax俄罗斯方块游戏
- 工作分解结构在软件开发中的应用
- Bug的价值的思考
- C语言static变量