最近我遇到了以下代码:
void CallThisInDifferentThreads(Return return)
{
var lock = "lock";
lock(lock)
{
//Do something here.
}
}
我的第一反应是此代码中的锁定无法正常工作,因为我们正在创建锁并在同一方法中使用它。调用此方法的每个线程都拥有它自己的锁副本,因此不会有同步。
但后来我意识到这应该有效,因为字符串转到字符串池,并且只有一个特定字符串的实例。我不确定我是否正确。
答案 0 :(得分:5)
锁定字符串 超级错误 。不要这样做。你不能保证其他一些聪明的灵魂也不会锁定琴弦,因为它们因为弦乐实习而有效地“超级”全球化,所以当这成为公认的练习时,轮子就会掉下来。
使用只有一个目的的私有对象锁定...锁定。字符串不符合此描述。