質問

私はこのような「聞こえる」というコードを持っています

スレッド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の間でsyncronisedする必要がありますが、それはありませんいくつかのSMPシステムでは、マザーボードメーカーを非難します。また、一部の古いチップ上TSCは、それが潜在的に非常に信頼性のない作りCPUの電源状態を変更するようです。 clock_gettime(CLOCK_MONOTONIC)は、より信頼性の高いですが、より多くのオーバーヘッドが(それはSYSTEMCALLです)持っていますが、はるかにこれを行うための最善の方法である。

私はまた、あなたのデータ構造をロックしていると仮定します)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top