TCriticalSection有很多读者和一位作家

Mar*_*nez 2 delphi multithreading thread-safety

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

由于数据是一个复杂的结构并以块的形式接收,因此更新代码会写入临时列表,并在完成结构时将此临时列表切换到"生产"列表,该列表由许多读取器线程读取.

我将"切换"代码作为一个关键部分与各自的读者一起使用,以使它们相互排除.后来我意识到,作为副作用,读者线程也是相互排斥的.

我的问题是,是否有一个替代的关键部分类,我可以将其描述为读者或编写者,以便允许读者同时执行.

除此之外,我只保护读取器代码,该代码收集它必须发送的数据,并在离开临界区后发送这些数据的副本.我想知道这个数据收集代码是否相互独占或者序列化是否应该更高效.

提前致谢.

gab*_*abr 6

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

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

在编译Windows时,您也可以考虑使用Slim Reader/Writer.那个是特定于Windows的,但速度非常快.