如果我需要在锁定互斥锁后解锁它,我该如何 return 一个值?

How do I return a value if I need to unlock a mutex after locking it?

我正在用 C 编写一个程序,我需要多个线程来访问队列中的元素。显然,我需要某种锁定,这样多个线程就不会同时尝试篡改队列中的同一元素。

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

我遇到麻烦的地方特别是在我的 dequeue 命令中。我的出队命令应该工作的方式是我需要 return 存储在队列头部的任何数据 - 但是,由于我试图使我的队列原子化,我必须用锁包装我的出队函数(pthread_mutex_lock/unlock()).如果我需要 return 那个数据到调用函数,我怎样才能这样做同时仍然能够解锁我的锁?

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;
}