2009-10-13 3 views

답변

10

잠금은 한 번에 하나의 스레드 만 실행할 수 있도록 보장하는 데 사용되는 모니터입니다.

lock(myobj) 
{ 
    // only 1 thread here 
} 

조인은 스레드가 완료 될 때까지 기다린 후 실행이 계속되기 전에 사용됩니다. 종료에 스레드에 대한

anotherThread.Join(); 
// execution here only when anotherThread is complete 
3

Thread.Join() 기다립니다. Monitor.Enter(obj) (컴파일러가 lock 문으로 항목을 표현하는 방법) obj의 객체 잠금을 보유 할 다른 스레드가 없을 때까지 기다립니다.

전자는 스레드 수명을 관리하는 데 사용되며 후자는 동시성을 제어하는 ​​데 사용됩니다.

2

아래 코드에서 두 번째 스레드는 첫 번째 스레드가 종료 될 때까지 기다립니다. 따라서 첫 번째 스레드가 시작되고 두 번째 스레드가 시작되기 전에 완료됩니다. 두 번째 예에서

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"); 
    } 
} 

출력의 시간에 실행됩니다 하나의 스레드 만이 알고 잠금 예를 들면 "11111111112222222222"또는 "22222222221111111111"이고 결합 예는 "11111111112222222222"입니다.

관련 문제