有人可以解释我是否可以拨打以下课程“线程安全”?
据我所知,如果我们不打破现有功能,我们可以调用线程安全的东西
示例:
{{1}}
答案 0 :(得分:3)
我不这么认为,因为_runningTasks
是共享对象,而您的方法Enqueue
正在写这个共享对象。例如,当一个线程已经执行了行号y时,另一个线程会将行号x中的条件检查评估为真 - 这可能不是故意的。
public void Enqueue(string key)
{
if (_runningTasks.ContainsKey(key)) /*say line no : x */
{
_runningTasks[key].Repeat = true;
return;
}
_runningTasks[key] = new RunningTask(); /*say line no:y*/
ExecuteTask(key);
}
使用ConcurrentDictionary
只会确保没有两个线程可以同时读/写字典。
到第二点:
据我所知,如果我们不这样做,我们可以称之为线程安全 打破现有功能
这不是线程安全的定义(可以说多线程环境中的理想结果之一)我建议阅读this post以获取官方意义。