2010-08-05 8 views
2
  1. 두 개의 CPU가 동시에 두 개의 "다른"스핀 록을 동시에 사용할 수 있습니까?동일한 프로세서에 2 개의 스핀 록이 있습니까?

  2. 이렇게 ... sigle (단일 프로세서) CPU가 두 개의 "다른"스핀 록을 동시에 가질 수 없습니까?

  3. 그래서 ...이 무슨 뜻 : 다른 메모리 리소스와 관련 "다른"의미 스핀 : 하나의 CPU에 스핀 락의 수> 1.

PS 수 없습니다.


스핀 락이 내부적으로 어떻게 작동하는지 압니까? ... 내 말은, 그들은 테스트 세트 운영 중에 버스를 동결합니까? 나는 봤지만 절대적인 대답은 없다.

답변

2

스핀 록은 쓰기가 동기화되는 공유 int 일뿐입니다. 프로세서에는 특별한 플래그가 없습니다. 따라서 스핀 록을 한 개 이상 확보 할 수 있습니다. (하지 말아야 ...)

유니 프로세서 시스템이 잠기는 것을 방지하기 위해 Windows는 IRQL을 DISPATCH_LEVEL으로 올립니다. 프로세서는 DISPATCH_LEVEL에서 실행되는 하나의 '스레드'만 가질 수 있으므로 동시에 여러 스핀 록을 잠그는 것이이 시스템에서 안전합니다. 교환기가 같은 메모리 버스의 모든 프로세서에 대한 원자 적으로 발생하는 것을

LONG lock = 0; 

KeAcquireSpinlock(...) 
{ 
    // raise irql. etc. 
    while(InterlockedExchange(&lock, 1) != 0) 
     /* do nothing*/; 
} 

KeReleaseSpinLock(...) 
{ 
    InterlockedExchange(&lock, 0); 
    // lower irql ... etc. 
} 

InterlockedExchange 보장 (이 100 % 사실 및 세부 사항으로 인해 분기 수) :

구현은 다음과 같이해야한다. 따라서 메모리 버스를 잠 그거나 적어도 특정 캐시 라인의 단독 소유권을 강제해야합니다.

+0

"프로세서는 DISPATCH_LEVEL에서 하나의 '스레드'만 실행할 수 있으므로 동시에 여러 스핀 록을 잠그면 시스템에서 안전합니다." 그 정보였습니다. 있어야 할 곳에 없는. 감사합니다 이렇게하면 uni 프로세서 스핀 록에 대한 의심이 사라집니다. – bakra