在程序中,我可以设计锁定线程,锁定对象或文件。 这些锁之间有区别吗? 如是, 有多少种锁可以用来设计?
是否有一些教程可以在面向对象的编程中设计锁?
答案 0 :(得分:1)
正如某人dss538所说,“答案”实际上取决于问题的背景。
您需要保护访问权限到底是什么?
一个数据或单个对象,某种容器中的项目,一段代码,一个像共享文件这样的系统资源?
另一个非常有意义的问题是你多久会访问这个“东西”,你打算用它做什么?
不同的锁定技术往往会产生不同的开销,而关键部分或互斥体对于很少访问且很少更新的内容可能非常好,如果您很少更新它并经常访问它,您可能需要查看读者作家锁。这里的另一个跟进问题是“我应该使用自旋锁”,这又是答案吗?系统还发生了什么,你是否会将另一种瓶颈(粗粒锁)换成另一种瓶颈?
我想问的最后一个问题是“锁定”某些东西的替代方法,即如果我能“安全地”获取受保护物品的副本并“安全地”使用该副本(理想情况下无需修改),这肯定比担心每个我可能修改过的东西要容易得多。
我为这个模糊的答案道歉,但更具体的问题在这里会有所帮助。
我鼓励你阅读并发原则并理解传统的“餐饮哲学家”“睡觉理发师”甚至“圣诞老人”问题,以了解这些事情如何运作的更多背景。
维基百科上的很多内容都很好,特别是'Concurrency Control'是一个有用的起始参考点,如果你的架子上没有一本好的操作系统/并发书。
答案 1 :(得分:0)
答案取决于你问题的背景。
您是否从某些API获取锁定?查看API文档。
总的来说,我会说不。锁是锁。您使用它来保护文件或对象的事实与API无关。你如何使用它取决于你。如果你愿意,你当然可以抽象出来并拥有FileLocks和ObjectLocks,但这取决于你。