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 语句将被执行。
我正在学习操作系统课程。我想问一下锁和临界区。考虑以下可以由多个线程调用的 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 语句将被执行。