C# Join()和Lock()之间的根本区别
对于Join()和lock()两种情况,一个线程可以依次执行。主要区别是什么?lock是一个监视器,用于确保一次只能执行一个线程C# Join()和Lock()之间的根本区别,c#,multithreading,C#,Multithreading,对于Join()和lock()两种情况,一个线程可以依次执行。主要区别是什么?lock是一个监视器,用于确保一次只能执行一个线程 lock(myobj) { // only 1 thread here } Join用于等待线程完成,然后再继续执行 anotherThread.Join(); // execution here only when anotherThread is complete Thread.Join()等待线程退出Monitor.Enter(obj)(编译器如何将条
lock(myobj)
{
// only 1 thread here
}
Join用于等待线程完成,然后再继续执行
anotherThread.Join();
// execution here only when anotherThread is complete
Thread.Join()
等待线程退出Monitor.Enter(obj)
(编译器如何将条目表示为lock
语句)不等待其他线程持有obj
的对象锁
前者用于帮助管理线程生存期,后者用于控制并发性。在下面的代码中,第二个线程等待第一个线程退出。因此,第一个线程开始并在第二个线程开始之前完成
public void threadExample1()
{
Thread t1=new Thread(fun1);
Thread t2=new Thread(fun2);
t1.Start();
t1.Join();
t2.Start();
}
在第二个示例中,我们不知道哪个线程将首先启动,但我们知道由于lock
public readonly object locker = new object();
public void threadExample2()
{
Thread t1=new Thread(fun1);
Thread t2=new Thread(fun2);
t1.Start();
t2.Start();
}
public void fun1()
{
lock(locker)
{
for (int i = 0; i < 10; i++)
Console.Write("1");
}
}
public void fun2()
{
lock(locker)
{
for (int i = 0; i < 10; i++)
Console.Write("2");
}
}
public readonly object locker=new object();
public void threadExample2()
{
螺纹t1=新螺纹(fun1);
螺纹t2=新螺纹(fun2);
t1.Start();
t2.Start();
}
公共图书馆1(
{
锁(储物柜)
{
对于(int i=0;i<10;i++)
控制台。写入(“1”);
}
}
公共图书馆2(
{
锁(储物柜)
{
对于(int i=0;i<10;i++)
控制台。写入(“2”);
}
}
输出将是“1111111222222”或“2222222211111111111111”作为锁示例,而只有“11111111112222222”作为连接示例