繁体   English   中英

TMemIniFile是线程安全的吗?

[英]Is TMemIniFile thread-safe?

用户正在收到间歇性错误“无法创建文件”C:... \\ Filename.ini“。无法对打开了用户映射部分的文件执行请求的操作。”

我无法找到有关此错误的更多信息,这有助于了解正在发生的事情。

TMemIniFile是线程安全的吗?

据我所知TMemIniFile(和任何其他TCustomIniFile后代)不是线程安全的。 您需要将其包装到关键部分。

在这个链接中你可以找到一个线程安全的TCustomIniFile的实现(理论上由TeamB的Peter Below编程,虽然我不能保证)。

还有约TMemIniFile的线程安全的英巴卡迪诺论坛的讨论在这里 他们谈论组件的C ++版本。

您还可以找到在MSDN关于您的错误消息的来源的讨论在这里 它有点长,但一般的结论是有2个exes试图访问同一个文件。 您可以在此处找到有关此主题的其他讨论。

首先,我假设导致报告问题的特定线程配置是有多个TMemIniFile实例,甚至可能在不同的进程中,同时从不同的线程保存。

TMemIniFile不是线程安全的。 为了避免任何竞争条件,您需要编写(伪)代码,如下所示:

AcquireLock;
Try
  ReadMemIniFileFromDisk;
  ModifyMemIniFileInMemory;
  WriteMemIniFileToDisk;
Finally
  ReleaseLock;    
End;

仅锁定文件操作是不够的,因为那样你可能会因为比赛而失去更改。 您必须锁定整个读/修改/写周期。

此错误消息是由AVG中的错误引起的。 显然,在其实时文件访问监控模式下,AVG以独占模式打开一些文件,防止其他人写入文件。

解决方法是将AVG配置为忽略此文件所在的文件夹。

谢谢,AVG! 我现在可以浪费2天的时间吗? :-)

感谢所有在这里回答的人。

汤姆

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM