是在类线程安全吗?说明

时间:2018-03-04 07:18:02

标签: c# .net multithreading thread-safety

有人可以解释我是否可以拨打以下课程“线程安全”?

据我所知,如果我们不打破现有功能,我们可以调用线程安全的东西

示例:

{{1}}

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以获取官方意义。