본문 바로가기

.NET/CLR

동기화에 필요한 object header

Object Header 에는 많은 정보가 포함도어있다 ..

모든 스레드에서 동기화를 시키기 위해 object header에는 스레드 동기화에 대한

정보를 가지게 된다.

아래의 그림은 일반 object header와 sync block에 관한 object header를 보여주고 있다.
 

 
위의 도표는 managed heap에 저장된 object들을 표시하고 있다. 각 object 들은 object header와 type handle, object instance 를 하나의 묶음으로 들어가게 되는데 object header 4byte , type hadle 4byte로 구성되어있다.

어떤 object가 멀티 스레딩에서 동기화를 요한다면 object header에 bitmask를 0x80000001 이런식으로 형성하고
managed heap에서 관리되지 않는 sync block table 에 index로 해당 object에 대한 sync block에 관한 정보를
삽입하게 된다.  (단 Thin Locks를 제외하고 이건 CLR에 의해 관리된다)

그리하여 이 object가 lock에 걸렸는지 알수있게 되고 어떤 스레드가 지금 이 ojbect를 가지고 있는지 알수 있게 된다.

맞나? 내 머리 속에 있는걸 주저리주저리 써봤다.

맞는지는 나도 모르겠다. 캬캬캬 믿거나 말거나