C# 返回简单整数成员变量时的线程安全性

C# 返回简单整数成员变量时的线程安全性,c#,.net,multithreading,locking,thread-safety,C#,.net,Multithreading,Locking,Thread Safety,在下面的C#代码片段中,GetID()是线程安全的吗 public class SharedData { protected int _nID = 0; public int GetID() { return nID; } } 提前感谢您的回复 读取是线程安全的。如果要写入nID,那么它就成了一个问题。读取是线程安全的。如果您要写入nID,那么它将成为一个问题。它不会修改任何内容。它怎么可能是线程安全的还是非线程安全的?它不修改任何内容。它怎么可

在下面的C#代码片段中,GetID()是线程安全的吗

public class SharedData
{
    protected int _nID = 0;
    public int GetID()
    {
        return nID;
    }
}

提前感谢您的回复

读取是线程安全的。如果要写入nID,那么它就成了一个问题。

读取是线程安全的。如果您要写入nID,那么它将成为一个问题。

它不会修改任何内容。它怎么可能是线程安全的还是非线程安全的?

它不修改任何内容。它怎么可能是线程安全的还是非线程安全的?

这取决于你所说的“线程安全”是什么意思。例如,如果“线程安全”的意思是“所有对该变量的写入都将保证在所有线程上以一致的顺序进行”,那么不,这根本不是“线程安全”。如果您的意思是“这个变量的测试和集合保证给出与单线程数据依赖规则一致的结果”,那么不,这根本不是“线程安全的”

public class SharedData
{
    protected int _nID = 0;
    public int GetID()
    {
        return nID;
    }
}

请仔细定义“线程安全”对您意味着什么,并向我们展示所有的编写器,以及所有对这些读卡器和编写器具有数据依赖性的代码,然后我们可以为您提供有意义的意见。这个问题中没有足够的信息来有意义地回答这个问题。

这取决于你所说的“线程安全”是什么意思。例如,如果“线程安全”的意思是“所有对该变量的写入都将保证在所有线程上以一致的顺序进行”,那么不,这根本不是“线程安全”。如果您的意思是“这个变量的测试和集合保证给出与单线程数据依赖规则一致的结果”,那么不,这根本不是“线程安全的”


请仔细定义“线程安全”对您意味着什么,并向我们展示所有的编写器,以及所有对这些读卡器和编写器具有数据依赖性的代码,然后我们可以为您提供有意义的意见。此问题中的信息几乎不足,无法开始有意义地回答此问题。

抱歉,假设有一个线程安全的成员函数可以更改其值。@bl23:在这种情况下,您可能希望将
\u nID
标记为
volatile
,以确保任何读取线程不要缓存过时的值。@bl23:你的假设引出了你自己的问题。如果一个读者不是,那么说一篇文章是“线程安全的”是完全没有意义的;螺纹安全是整个系统的特性,而不是单个部件的特性。你能清楚地定义“线程安全”对你意味着什么吗?对不起,假设有一个线程安全的成员函数可以更改它的值。@bl23:在这种情况下,你可能想将
\u nID
标记为
volatile
,以确保任何读取线程都不会缓存过时的值。@bl23:你的假设引出了你自己的问题。如果一个读者不是,那么说一篇文章是“线程安全的”是完全没有意义的;螺纹安全是整个系统的特性,而不是单个部件的特性。你能清楚地定义“线程安全”对你意味着什么吗?