gpt4 book ai didi

multithreading - Delphi 中增加和返回整数的线程安全方法

转载 作者:行者123 更新时间:2023-12-03 14:36:41 25 4
gpt4 key购买 nike

在单线程应用程序中,我使用如下代码:

Interface
function GetNextUID : integer;
Implementation
function GetNextUID : integer;
const
cUID : integer = 0;
begin
inc( cUID );
result := cUID;
end;

这当然可以作为单例对象来实现,等等 - 我只是给出最简单的示例。

问:如何修改此函数(或设计一个类)以从并发线程安全地实现相同的结果?

最佳答案

您可以使用Interlocked* 函数:

    function GetNextUID : integer;
{$J+} // Writeble constants
const
cUID : integer = 0;
begin
Result := InterlockedIncrement(cUID);
end;

更现代的 Delphi 版本已将这些方法重命名为 Atomic* (如 AtomicDecrementAtomicIncrement 等),因此示例代码变成了这样:

    function GetNextUID : integer;
{$J+} // Writeble constants
const
cUID : integer = 0;
begin
Result := AtomicIncrement(cUID);
end;

关于multithreading - Delphi 中增加和返回整数的线程安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4016919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com