我有两个线程(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/