有人可以解释之间的区别:
我只是想不出来.在我看来前两个是一样的?
必须在线程之间共享数据.哪种方法最好同步?
锁是更好的方法还是Mutex?
namespace ConsoleApplication8
{
class Data
{
public int X
{
set;
get;
}
public int Y
{
get;
set;
}
public int result;
}
class Program
{
static int a;
private static object aLock = new object();
static void Main(string[] args)
{
ParameterizedThreadStart aStart = new ParameterizedThreadStart(Addition);
Thread aThread = new Thread(aStart);
Data aData = new Data();
aData.X = 10;
aData.Y = 20;
Thread aThread2 = new Thread(aStart);
aThread2.Start();
aThread.Start(aData);
aThread.Join();
aThread2.Join();
Console.WriteLine("End of the program");
}
static …Run Code Online (Sandbox Code Playgroud) 关于.net中的Lock()构造的两个问题
首先,我知道如果一个对象被锁定在一个类中,而另一个类试图锁定同一个对象,则会产生死锁.但为什么?我在MSDN上看过它,但MSDN很少清楚.
----编辑问题一----仍然困惑.我有一个主线程(UI线程),产生许多Threadpool线程.每个子线程在使用数据之前锁定数据.这样每次都很好.
如果我然后尝试从UI线程锁定相同的数据以检查我是否应该为边缘情况创建新线程,我几乎每次都会创建死锁.
----编辑问题二----其次,如果我有一个复合对象,我锁定它的所有子对象也被锁定了?短代码演示:
internal sealed class Update
{
//Three objects instantiated via other external assemblies
public DataObject One { get; set; }
public DataObject Two { get; set; }
public ReplayStatus Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我调用lock(UpdateObject)是三个内部对象中的每一个,并且所有子对象都被锁定了?
所以我应该做这样的事情来防止线程与我的数据对象一起玩:
Lock(UpdateObject.One)
{
Lock(UpdateObject.Two)
{
Lock(UpdateObject.Status)
{
//Do Stuff
}
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
c#中的监视器与互斥锁
嗨,
在这个网站上,我发现不同人的不同答案令人困惑.仍然完全不清楚在哪种情况下,[Lock,Monitor,Mutex]这三个术语中的每一个对于实时需求都非常有用.这些术语之间的混淆更加复杂.
我需要在高水平深度上有非常明显的差异,并且基本上需要在三个术语中的每一个中使用更好的例子和清楚的理解.
请使用C#.NET以非常好的示例提供非常高级别的实时使用或需求的信息.
谢谢Sukumar
互斥和监视器实现之间有什么区别.任何人都可以帮我学习这两个wp7(wp7的可实现代码).请尝试添加一些代码片段,以帮助我以简单的方式理解这些技术.Thanx提前Stezma