Skip to main content
 首页 » 编程设计

c#之我需要使用和分配锁吗

2024年02月20日32虾米哥

这可能是一个愚蠢的问题,但我是否需要使用和分配锁,或者我可以简单地返回结果。

例如:

我有一个私有(private)辅助方法,它返回一个 IEnumerable 文件名列表。它使用锁来确保该方法在遍历 m_transfers 集合时是线程安全的。

我需要作业吗...

IEnumerable<String> updated; 
lock (m_transfers.Lock) 
{ 
    updated = m_transfers.Values.Where(transfer => transfer.Updated) 
                         .Select(transfer => transfer.Filename); 
} 
return updated; 

或者我可以做吗

lock (m_transfers.Lock) 
{ 
    return updated = m_transfers.Values.Where(transfer => transfer.Updated) 
                            .Select(transfer => transfer.Filename); 
} 

请您参考如下方法:

不,您不需要添加额外的变量;无论哪种方式,语义都是相同的,因为在任何一种情况下,我们都只会在释放锁后实际上返回值。

由于该变量没有用处,我会删除它并使用第二个版本 - 虽然技术上,编译器实际上将它放回原处(一个锁 涉及 try/finally,在 IL 级别,您不能从 try 中ret;所以编译器实际上像你的第一个版本一样编写它)。