- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用 Delphi 10 Seattle Win32 编写的服务应用程序,它具有在线程中定期更新的内存数据。
由于数据是一个复杂的结构并且以 block 的形式接收,更新代码写入一个临时列表,当它完成结构时将这个临时列表切换到一个“生产”列表,由许多读取线程读取。
我将“switch”代码与各自的读者放在一起作为关键部分,以使它们相互排除。后来我意识到,读者线程之间的副作用也是相互排斥的。
我的问题是是否有一个替代的关键部分类,我可以将其描述为读者或作者,以便允许读者同时执行。
除此之外,我只保护读取器代码,该代码收集必须发送的数据并在离开临界区后复制要发送的数据。我想知道让这个数据收集代码互斥或序列化是否应该更高效。
提前致谢。
最佳答案
有TMultiReadExclusiveWriteSynchronizer在 SysUtils 中。 (如果您喜欢手指,请考虑使用来自同一单元的 TMREWSync
别名。)
不过请记住,它非常慢,而且很多时候一个简单的关键部分会表现得更好。
在为 Windows 编译时,您还可以考虑使用 Slim Reader/Writer .那个是特定于 Windows 的,但速度非常快。
关于multithreading - TCriticalSection 有很多读者和一个作者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53173996/
我有一个用 Delphi 10 Seattle Win32 编写的服务应用程序,它具有在线程中定期更新的内存数据。 由于数据是一个复杂的结构并且以 block 的形式接收,更新代码写入一个临时列表,当
我正在编写一个多线程聊天服务器应用程序。因此临界区是非常必要的。我刚刚为线程 TreeView 制作了一个包装类。它在客户端中完美运行,但服务器会引发 AV。 有两种形式,FormServer(除了
我想要两个过程可以互相调用,或者从正在运行的任何线程调用,但一次只能运行一个。我怎样才能做到这一点?这能正常工作吗? var cs: TCriticalSection; procedure a;
在Windows平台上,TCriticalSection是通过调用Windows API EnterCriticalSection/LeaveCriticalSection来实现的。 Microsof
我正在更新 Delphi (Delphi 2009) 代码,它专门使用 TCriticalSection.Acquire/Release 对,而不是 Enter/Release 或 Leave 对。我
我是一名优秀的程序员,十分优秀!