假设我有下面的哈希集
HashSet<string> hsWaitingToBeFetched = new HashSet<string>();
现在我正在进行多线程编程,所以我必须锁定它才能同步对象
我可以用这两种方式锁定它有什么性能差异吗?
private Object lockHashset = new Object();
lock(lockHashset)
{
// do stuff here
}
或
lock(hsWaitingToBeFetched)
{
// do stuff here
}
答案 0 :(得分:3)
没有性能差异 1 .. 如果某些其他代码也锁定在HashSet上,则语义差异将是露出。
我认为在这种情况下使用单独的锁定对象更为明确:
但是,因为单独的锁定对象没有锁定HashSet,如果其他东西需要它,那么它就会...
1 新的锁定对象创建成本是可忽略的。对于所描述的两种情况,CLR以相同的方式进入监视器。