multithreading - 两个(非主)线程同步

标签 multithreading delphi

我有两个线程(A 和 B)+ 一个主线程 (C) 正在运行。线程 A 包含一个用于写入数据库的对象。有时候线程B也想写数据库。

据我所知,出于这个原因,我必须在线程 A 和 B 之间创建同步。如果我在线程 B 中使用 Synchronize 方法,它将与主线程 C 同步,但不会与 A 同步。如何处理这种情况?

最佳答案

这最好集成到共享服务或资源中,这样两个线程就不需要相互了解。伪代码:

uses
  SyncObj;

TSomeService = class
private
  FLock : TCriticalSection;
public
  constructor Create;
  destructor Destroy; override;
  procedure UseService;
end;

constructor TSomeService.Create;
begin
FLock := TCriticalSection.Create;
end;

destructor TSomeService.Destroy;
begin
FreeAndNil (FLock);
end;

procedure TSomeService.UseService;
begin
FLock.Enter;
try
  // ...
finally
  FLock.Leave;
 end;

这对两个线程都是完全透明的,所以两个线程都可以直接调用

FSomeService.UseService;

无需同步。

关于multithreading - 两个(非主)线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194821/

相关文章:

java - 仅让类的一部分等待执行,无论是否有线程?

带有 Facebook 登录示例的 java.lang.RuntimeException

python - 如何使用 subprocess.POPEN 获取异步输入和输出

delphi - 如何打开麦克风?

delphi - 如何使用 Delphi-Mocks 框架在 Delphi 的子类中使用模拟

multithreading - 多色,多线程加速: reading through CSVs using TMemoryStream

asp.net - 在 ASP.NET 中使用 .NET 4.0 任务

.net - 两个被同一个对象锁定的 SyncLocked 代码块可以同时执行吗?

delphi - 我可以在 msbuild 命令行中添加条件定义吗?

delphi - 浏览数据集时显示实际数据库数据(FireDac、FDQuery)