请解释这两种锁定类型之间的区别。多线程:锁定对象类型之间的区别
我有一个List
,我想访问线程安全:
var tasks = new List<string>();
1.
var locker = new object();
lock (locker)
{
tasks.Add("work 1");
}
2.
lock (tasks)
{
tasks.Add("work 2");
}
我的想法:
- 防止两个不同的线程同时运行锁定的代码块。
但是,如果另一个线程运行不同的方法,它试图访问task
- 这种类型的lock
不会帮助。
- 阻止
List<>
实例,所以其他方法中的其他线程将被阻塞,直到我解锁tasks
。
我是对还是错?
请参阅[此问题](http://stackoverflow.com/questions/6891711/difference-between-lockthis-and-a-- lock-on-static-object?rq = 1)和帖子上的链接。 – gunr2171
*您的想法*不正确。没有这样的事情,例如*阻止实例*。 'Lock'关键字是通过* Monitor.Enter *和* Monitor.Exit实现的。请参阅http://stackoverflow.com/questions/4978850/monitor-vs-lock – EZI