有多少种锁可用于设计?

时间:2009-06-08 15:43:41

标签: oop locking

在程序中,我可以设计锁定线程,锁定对象或文件。 这些锁之间有区别吗? 如是, 有多少种锁可以用来设计?

是否有一些教程可以在面向对象的编程中设计锁?

2 个答案:

答案 0 :(得分:1)

正如某人dss538所说,“答案”实际上取决于问题的背景。

您需要保护访问权限到底是什么?

一个数据或单个对象,某种容器中的项目,一段代码,一个像共享文件这样的系统资源?

另一个非常有意义的问题是你多久会访问这个“东西”,你打算用它做什么?

不同的锁定技术往往会产生不同的开销,而关键部分或互斥体对于很少访问且很少更新的内容可能非常好,如果您很少更新它并经常访问它,您可能需要查看读者作家锁。这里的另一个跟进问题是“我应该使用自旋锁”,这又是答案吗?系统还发生了什么,你是否会将另一种瓶颈(粗粒锁)换成另一种瓶颈?

我想问的最后一个问题是“锁定”某些东西的替代方法,即如果我能“安全地”获取受保护物品的副本并“安全地”使用该副本(理想情况下无需修改),这肯定比担心每个我可能修改过的东西要容易得多。

我为这个模糊的答案道歉,但更具体的问题在这里会有所帮助。

我鼓励你阅读并发原则并理解传统的“餐饮哲学家”“睡觉理发师”甚至“圣诞老人”问题,以了解这些事情如何运作的更多背景。

维基百科上的很多内容都很好,特别是'Concurrency Control'是一个有用的起始参考点,如果你的架子上没有一本好的操作系统/并发书。

答案 1 :(得分:0)

答案取决于你问题的背景。

您是否从某些API获取锁定?查看API文档。

总的来说,我会说不。锁是锁。您使用它来保护文件或对象的事实与API无关。你如何使用它取决于你。如果你愿意,你当然可以抽象出来并拥有FileLocks和ObjectLocks,但这取决于你。