Return 语句应该在临界区之外吗?

Should a Return statement be outside of critical section?

我正在学习操作系统课程。我想问一下锁和临界区。考虑以下可以由多个线程调用的 C 函数。每当使用共享资源 balance 时,我都会使用锁。

int withdraw(account, amount) 
{
     acquire(lock);
     balance = get_balance(account);
     balance = balance - amount;
     put_balance(account, balance);
     release(lock);
     return balance;
}

我的问题是我应该这样做还是应该在 return 语句之后释放锁?这两种方式的后果是什么?哪种方式更好?

我看到了另一个类似的 Question 但我无法从中理解在我的示例案例中正确的做法是什么。

您链接到的问题是关于 C# 代码,而不是 C。在 C# 中,当您从 lock 块中 return 时,锁会自动释放。在 C 中,没有 lock 语句。你总是需要自己释放它。如果您在临界区内 return,则不会释放锁,因为 return 语句之后的 none 语句将被执行。