我有 100 项记录类型的静态数组:
TMy_Array:array[1..100] of T;
其中 T 是:
T = record
A: double;
B: Date;
C: String;
end;
我有n
类似的线程在修改它们的元素TMy_Array
TMy_Array[n].A;
TMy_Array[n].B;
TMy_Array[n].C)`.
N
接近100
。
我还有 10 个其他线程可以选择性地修改任何字段TMy_Array
。为了安全地实现这一点,我应该使用关键部分,问题来了:
是否只使用一个临界区不会导致争用和等待访问数组的线程过度拥挤?
也许我可以或应该应用 100 个关键部分来保护对 T_Array 中特定项目的访问并且不会阻塞其他线程?
Var
Cs:array [1..100] of TRTLCriticalSection;
//then for n-thread:
EnterCriticalSection(CS[n]);
TMy_Array[n].A:=…;
TMy_Array[n].B:=…;
TMy_Array[n].C:=…;
LeaveCriticalSection(CS[n]);
这是个好主意,不会超载过多的应用程序吗?
第二个问题:
是TDateTime
(真的Double
)和String
原子数据吗?我可以阅读(只阅读)它们而不用担心在另一个线程正在写入它时发生冲突吗?