C语言 如果我需要在锁定互斥锁后解锁它,我如何返回一个值?



我正在用C写一个程序,我需要多个线程来访问队列中的元素。很明显,我需要某种锁到位所以多个线程不是试图篡改队列中相同的元素。

所以我所做的是在我的队列周围创建一个包装器,让每个线程调用,而不是直接访问我的队列。

我遇到麻烦的地方是我的dequeue命令。dequeue命令的工作方式应该是,我需要返回存储在队列头部的任何数据——然而,由于我试图使队列原子化,我必须用锁(pthread_mutex_lock/unlock())包装dequeue函数。如果我需要将该数据返回给调用函数,我该如何在仍然能够解锁的情况下这样做?

int atomic_dequeue(Queue q) {
pthread_mutex_lock(&lock);
return dequeue(q);
pthread_mutex_unlock(&lock);
}

将值存储在变量中

int atomic_dequeue(Queue q) {
pthread_mutex_lock(&lock);
int rv = dequeue(q);
pthread_mutex_unlock(&lock);
return rv;
}

最新更新