문제

다음과 같은 "소리"가있는 코드가 있습니다.

스레드 1

now = rdtsc();
for_each_member_in_a_list {
   if ( member_in_list.deadline() <= now ) {
      do_something;
   }
}

스레드 2

now = rdtsc();
for_each_member_in_a_list {
   member_in_list.updatedealine( foo(now, ...) );
}

이제 이것은 SMP 시스템으로 과거에 잘 작동하는 동안이 코드는 의도 한대로 작동하지 않습니다. 나는 clock_monotonic과 함께 clock_gettime을 사용할 것이라고 생각하지만 먼저 다른 힌트를 귀여워하고 싶습니다.

도움이 되었습니까?

해결책

이론적으로 TSC는 마더 보드에있는 모든 CPU 사이에 동기화되어야하지만 일부 SMP 시스템에서는 마더 보드 제조업체를 비난하지 않습니다. 또한 일부 오래된 칩에서 TSC는 CPU의 전력 상태에 따라 변하는 것으로 보이며 잠재적으로 매우 신뢰할 수 없습니다. clock_gettime (clock_monotonic)은 더 신뢰할 수 있지만 더 많은 오버 헤드 (SystemCall)를 가지고 있지만이를 수행하는 가장 좋은 방법입니다.

또한 데이터 구조를 잠그고 있다고 가정합니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top