Vik*_*sov 5 delphi multithreading critical-section
我有一个myStringList大约100个值的字符串列表,我正在对它进行异步访问.我想知道它是否是线程安全的:
currentIndex := myStringList.IndexOf(wantedValue);
Run Code Online (Sandbox Code Playgroud)
或者我总是这样做:
criticalS.Enter;
try
currentIndex := myStringList.IndexOf(wantedValue);
finally
criticalS.Leave;
end;
Run Code Online (Sandbox Code Playgroud)
您绝对需要使用锁来保护可变字符串列表的所有访问。如果编写器线程在您的线程读取时修改列表,则代码可能会失败。您可能会引用已被破坏的字符串。或者,当您阅读该列表时,该列表可能会被重新分配到不同的地址。
您需要对所有访问(读和写)使用相同的锁。您可以使用多次读、独占写锁而不是临界区。但您确实需要某种形式的同步。
如果所有线程都从列表中读取,并且没有线程以任何方式修改它,那么您不需要锁。