2

我正在用 C 实现自定义版本的 pthread_barrier_wait。在我的第一个简单实现中,我使用了锁和条件变量。但是经过一些测试和研究后,我发现当我使用连续的barrier_wait调用时,它无法正常工作,因为它可以与pthread_barrier_wait一起使用。我尝试了另一种方法,使用我在互联网上找到的关于感觉反转的算法。

int local_sense = 0;
void barrier_wait(barrier_t *b)
{
    local_sense = (local_sense == 0) ? 1 : 0;
    pthread_mutex_lock(&b->lock);
    int arrived = ++b->counter;
    if(arrived == b->threads)
    {
        pthread_mutex_unlock(&b->lock);
        b->counter = 0;
        b->flag = local_sense;
    }
    else
    {
        pthread_mutex_unlock(&b->lock);
        while(b->flag != local_sense){};
    }
}

看起来它工作正常,但我想让它与第一个一样的条件变量一起工作。到目前为止,即使在简单的程序中,我尝试过的任何东西都会给我带来奇怪的结果。有什么建议么?

编辑

我想做的是用条件变量代替忙碌的等待

4

0 回答 0