多线程的Monitor机制
1.使用方法:
Monitor.Enter(buffer);
try
{
for (int k = 0; k < 100; k++)
sum += buffer[k];
}
finally
{
Monitor.Exit(buffer);
} 说明:将缓存buffer锁定,防止其他线程对该资源进行操作,最后释放锁
当对值类型资源进行Monitor锁时需注意:
int a = 1;
Monitor.Enter(a);
try
{
a *= 3;
}
finally
{
Monitor.Exit(a);
} 变量a为不能直接传递给Monitor.Enter()和Monitor.Exit(),需进行俩次装箱操作,结果导致以下Monitor机制


解决办法: 先将值类型转换为引用类型
int a;
object o = a;
Monitor.Enter (o);
try {
a *= 3;
}
finally {
Monitor.Exit (o);
} ☆ C# Lock关键字不需要考虑这一点
真正的大师永远怀着一颗学徒的心。

浙公网安备 33010602011771号