أفرقة المديرين الإقليميين بمناسبة المواعيد النهائية مرة

StackOverflow https://stackoverflow.com/questions/524502

  •  22-08-2019
  •  | 
  •  

سؤال

ولدي التعليمات البرمجية التي "يبدو" مثل هذا:

وموضوع 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_gettime مع CLOCK_MONOTONIC، ولكن أود أن الأذن بعض التلميحات الأخرى أولا.

هل كانت مفيدة؟

المحلول

في نظرية يجب أن يكون TSC في syncronised بين كل من وحدة المعالجة المركزية على اللوحة الأم، ولكن في بعض الأنظمة SMP انها ليست، إلقاء اللوم على الشركة المصنعة اللوحة الأم. أيضا، على بعض رقائق القديمة يبدو TSC لتغيير مع الدولة قوة وحدة المعالجة المركزية مما يجعل من المحتمل أن تكون غير موثوقة جدا. clock_gettime (CLOCK_MONOTONIC) هو أكثر موثوقية، ولكن لديه المزيد من النفقات العامة (انها systemcall)، ولكن هو إلى حد بعيد أفضل طريقة للقيام بذلك.

وأنا أيضا نفترض أنك تأمين هياكل البيانات الخاصة بك:)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top