110,538
社区成员
发帖
与我相关
我的任务
分享
Hashtable ht;
......
if (ht.Contains(k)
{
lock(ht[k])
{
if (ht.Contains(k)
{
....
}
}
}
if (ht.Contains(k)
{
lock(ht[k])
这里应该就有问题,第一条语句的判断条件就算是返回true,也不能保证第二个语句的 ht[k] 不会是 null。所以它需要先对ht加锁,然后你才能保证对 ht[k] 可以加锁。这种错误需要并发测试才能发现,随便用手工调试方法“敲两下键盘、动动鼠标”来测试则不容易发现。