7

このようなブロックでミューテックスロックを置き換えるポイントは何ですか

void stack_push(stack* s, node* n)
{
    node* head;
    do
    {
        head = s->head;
        n->next = head;
    }
    while ( ! atomic_compare_exchange(s->head, head, n));
} 

ミューテックスをこのアトミック交換に置き換えることで得られる利点を理解できませんか?

4

2 に答える 2

14

多くの利点があります。

  1. はるかに高速です (Windows では 10 倍または 100 倍 - Linux ではそれほどではなく、10% 向上)
  2. スケーリングがはるかに優れてます(ただし、まだ十分ではありません-約100個の論理コアまでのみ)
  3. それはずっとクールで、あなたははるかに知的で能力があるように見えます
  4. 待機またはスリープが不要な場合、このコードは待機またはスリープが禁止されている場所、たとえば割り込みハンドラ、Windows (DISPATCH_LEVEL) および Linux カーネルの特定の部分などで使用できます。
于 2012-09-20T15:42:00.463 に答える
7

通常、ミューテックスよりも高速です。そうは言っても、単にすべてのミューテックスをCASに置き換えることはできません。単一のCASは、多くのスレッド間で1つの参照を別の参照と安全に交換します。

たとえば、ある書き込みが別の読み取りに依存する複合関​​数がある場合は、原子性を確保するためにミューテックスが必要になります。

于 2012-09-20T15:37:52.730 に答える