小编ov3*_*337的帖子

Chase Lev 双端围栏

我读了文章“正确且高效的弱内存模型的工作窃取”,其中作者给出了这段代码:

int take(Deque *q) {
    size_t b = load_explicit(&q->bottom, relaxed) - 1;
    Array *a = load_explicit(&q->array, relaxed);
    store_explicit(&q->bottom, b, relaxed);
    thread_fence(seq_cst);

    size_t t = load_explicit(&q->top, relaxed);
    int x;
    if (t <= b) {
        /* Non-empty queue. */
        x = load_explicit(&a->buffer[b % a->size], relaxed);
        if (t == b) {
            /* Single last element in queue. */
            if (!compare_exchange_strong_explicit(&q->top, &t, t + 1, seq_cst, relaxed))
                /* Failed race. */

                x = EMPTY;
            store_explicit(&q->bottom, b + 1, relaxed);
        }
    } else …
Run Code Online (Sandbox Code Playgroud)

c++ containers multithreading atomic lock-free

5
推荐指数
0
解决办法
221
查看次数

标签 统计

atomic ×1

c++ ×1

containers ×1

lock-free ×1

multithreading ×1