C# 查找多个线程向同一函数提供的最大日期

C# 查找多个线程向同一函数提供的最大日期,c#,multithreading,locking,C#,Multithreading,Locking,假设我有这个函数: class Example { private DateTime m_date; private string m_id; public void Max(DateTime date, string id) { if (date > m_date) { m_date = date; m_id = id; } } } 多个线程持有相同

假设我有这个函数:

class Example
{
    private DateTime m_date;
    private string m_id;

    public void Max(DateTime date, string id)
    {
        if (date > m_date)
        {
            m_date = date;
            m_id = id;
        }
    }
}
多个线程持有相同的
Example
实例,每个线程都在调用
Max()
函数

我希望在所有调用之后都有正确的日期和id(就好像它是按顺序调用的一样)


一种选择显然是使用锁,但我很高兴在这里避免这种情况(使用联锁或类似的方式)。

可能,谢谢。我不认为不使用锁就可以实现真正的线程安全,因为您有3行代码,并且只有在代码工作的同时锁定它们,即使使用@MickyD的共享代码,您也只使用了两行线程安全的代码,比较并设置
m_date
,但是设置
m_id
将不会是线程安全的,它很可能会产生意外的结果,您需要一个CompareExchange,它需要根据一个条件更改两个变量。为什么要避免
锁定
?性能问题?我认为您需要向我们展示代码的其余部分,以便我们能够提供有价值的帮助。