Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 有许多读者和一位作者的评论部分_Multithreading_Delphi_Thread Safety - Fatal编程技术网

Multithreading 有许多读者和一位作者的评论部分

Multithreading 有许多读者和一位作者的评论部分,multithreading,delphi,thread-safety,Multithreading,Delphi,Thread Safety,我有一个用Delphi 10 Seattle Win32编写的服务应用程序,它有一个线程中定期更新的内存数据 由于数据是一个复杂的结构并以块的形式接收,更新代码将写入一个临时列表,当它完成该结构时,会将该临时列表切换到一个“生产”列表,该列表由多个读卡器线程读取 我将“切换”代码作为一个关键部分,与相应的读者一起将它们排除在外。后来我意识到,作为一种副作用,读者线程之间也是相互排斥的 我的问题是,是否有一个可选的critical section类,我可以将其描述为reader-o-writer,

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

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

我将“切换”代码作为一个关键部分,与相应的读者一起将它们排除在外。后来我意识到,作为一种副作用,读者线程之间也是相互排斥的

我的问题是,是否有一个可选的critical section类,我可以将其描述为reader-o-writer,以便允许读者同时执行

除此之外,我只保护读卡器代码,该代码收集必须发送的数据,并在离开关键部分后复制要发送的数据。我想知道是否应该让这个数据收集代码以互斥的方式或序列化的方式更有效

提前感谢。

SysUtils中有。(如果你喜欢你的手指,考虑使用<代码> TMRWSWYNC 来自同一个单元的别名。)< /P> 但请记住,它的速度非常慢,很多时候,一个简单的关键部分会表现得更好


<>你在编译Windows时,你也可以考虑使用。这是一个特定于Windows的,但速度非常快。

我找到了MultiReadExclusiveWriteSynchronizer,我想这正是我要找的。的确,但一定要做一些计时,因为Emba的同步对象效率不高,你为什么不推荐你的TOmniMREW?因为TOmniMREW不适合没有经验的用户使用。它无法升级锁,不能嵌套,并且在等待锁时会占用大量CPU。