RW锁定层次结构锁定

时间:2016-10-06 11:28:45

标签: multithreading concurrency

我正在尝试构建层次结构锁定系统以避免死锁。意思是将代码分解为层(或级别),并在每个级别仅允许锁定在下一级别。在同一级别内,您应该使用预定义的顺序锁定。这可以防止大多数死锁。 像这样http://www.drdobbs.com/parallel/use-lock-hierarchies-to-avoid-deadlock/204801163?pgno=1

对于互斥锁,这将像魅力一样工作,但对于读写锁,它会失败。例如,如果我拿一个读锁然后想把它变成写锁,那就意味着我正在同一级别拿一把新锁,这是用这个算法禁止的。

如何更改算法以适用于RW和互斥锁?我还应该考虑其他一些算法吗?

PS:我正在编写C ++编程,但这个问题实际上也与理论问题相关

1 个答案:

答案 0 :(得分:0)

假设事物A的读锁定可以由多于1个线程保持,而写锁定只能由1个线程保持,并且如果有任何读锁定则不能被授予(我的默认理解读写锁定是什么)那么你不能这样做。

如果线程1和2具有读锁定,它们中的任何一个如何将读锁定转换为写锁定?如果允许,则一个线程具有读锁定,一个线程具有写锁定。您需要做的是释放读锁和该级别的所有其他锁,然后取出一组包含写锁的新锁。在上面的场景中,写锁定线程现在将阻塞,直到另一个线程释放其读锁定。

但是,如果您的读锁只能由单个线程保存,那么它与写锁的区别如何?如果你有锁,那么你可以独家访问被锁定的思考。