最近看了一篇关于多线程资源竞争使用lock的一个例子,如下:
static int nextId;
static object mutex = new object();static int NextId()
{
lock (mutex)
{
return customerId++;
}
}我的问题是,为什么要加一个object 对象mutex,而不直接使用lock(nextId)呢?
static int nextId;
static int NextId()
{
lock (nextId)
{
return customerId++;
}
}
static int nextId;
static object mutex = new object();static int NextId()
{
lock (mutex)
{
return customerId++;
}
}我的问题是,为什么要加一个object 对象mutex,而不直接使用lock(nextId)呢?
static int nextId;
static int NextId()
{
lock (nextId)
{
return customerId++;
}
}
而Mutex则多用于锁定多线程间的同步调用。Monitor和Lock多用于锁定被调用端,而Mutex则多用锁定调用端
因为,那个 nextID 很可能有别的用途,而object型的 mutex 是专用来给你 lock 的……MSDN上就是这么用的:LOCK 语句
本来访问变量就在访问你怎么把它作为互斥变量用,显然不合逻辑
楼主给分哦
static int nextId;
static int NextId()
{
return Interlocked.Increase(ref nextId);
}