TCriticalSection有许多读者和一位作家

时间:2018-11-06 14:32:18

标签: multithreading delphi thread-safety

我有一个用Delphi 10 Seattle Win32编写的服务应用程序,该应用程序具有在线程中定期更新的内存中数据。

由于数据是一个复杂的结构且以块形式接收,因此更新代码将写入临时列表,当结构完成后,会将此临时列表切换为“生产”列表,该列表将由许多读取器线程读取。

我将“ switch”代码作为关键部分与各个阅读器一起使用,以使它们相互排斥。后来我意识到,作为副作用,读取器线程在它们之间也是互斥的。

我的问题是,是否可以将其他关键节类描述为读者或作家,以允许读者同时执行。

除此之外,我仅保护读取器代码,该代码收集必须发送的数据,并在离开关键部分后复制要发送的数据。我想知道是否应该使此数据收集代码相互排斥或序列化会提高性能。

谢谢。

1 个答案:

答案 0 :(得分:6)

SysUtils中有TMultiReadExclusiveWriteSynchronizer。 (如果您喜欢用手指,可以考虑使用同一单位的TMREWSync别名。)

请记住,它非常慢,很多时候,简单的关键部分会表现更好。

在为Windows编译时,您也可以考虑使用Slim Reader/Writer。那是Windows特有的,但是速度很快。