我有一段这样的代码:
public class UserCache
{
private Dictionary<int, User> _users = new Dictionary<int, User>();
public User GetUser(int id)
{
User u = null;
lock (_users)
{
if (_users.containsKey(id))
return _users[id];
}
//The below line is threadsafe, so no worries on that.
u = RetrieveUser(id); // Method to retrieve from database;
lock (_users)
{
_users.Add(id, u);
}
return u;
}
}
我正在锁定对字典的访问,但是我团队中的某个人告诉我它仍然不是线程安全的(没有解释)。问题是 - 你认为这完全是线程安全的吗?
编辑:忘了问,解决方案是什么样的。请注意,我不想锁定整个方法,因为检索用户是一项耗时的操作。