2015-07-21 21 views
1

假设互斥锁或自旋锁被锁定在一个函数中并在另一个函数中解锁(在同一个线程中)。哪种情况被认为是适当的,哪些不适当?我对这个问题的设计/模式/架构观点感兴趣。从代码设计的角度锁定/解锁不同功能中的同步原语

我几乎可以肯定的是,通常这种方法是不受欢迎的,因为我们可以跨越在不相关的代码块中释放锁的责任,尽管我自己没有足够的经验来回答这个问题。

PS:我已经看了下面的链接,它并不能帮助我: Linux Kernel - Can I lock and unlock Spinlock in different functions?

回答

0

的更远的锁定和解锁动作,它是推理的代码更难。让它们在不同的函数中使它比在相同函数中甚至非常分离要困难得多(假设函数不仅仅是锁定/解锁的包装,而且还具有其他行为)。

如果自动配对锁定和解锁的装置是可用的(例如用Java的lock关键字或C++的std::lock_guard),更喜欢使用它。这些结构有助于确保在特殊情况下以及在代码中的“快乐路径”中的正确行为。

如果你真的需要保留锁超越函数返回,保证(如果是C或C++在这两个宣言和执行文件)和状态,这功能应该被调用,它在功能的评论明确指出释放锁。

通常,锁上的这种扩展保持可以更好地表示为一个状态变量(必须本身可以原子访问)而不是锁。