Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 有多少种锁可以用来设计?_Oop_Locking - Fatal编程技术网

Oop 有多少种锁可以用来设计?

Oop 有多少种锁可以用来设计?,oop,locking,Oop,Locking,在程序中,我可以设计线程锁、对象锁或文件锁。 这些锁有区别吗? 如果是, 有多少种锁可以用来设计 是否有一些面向对象编程中设计锁的教程 答案取决于问题的上下文 您是否从某些API获取锁?检查API文档 但总的来说,我会说不。锁就是锁。使用它来保护文件或对象这一事实对API来说并不重要。如何使用它取决于你自己。如果愿意,您当然可以抽象出文件锁和对象锁,但这取决于您。正如有人dss538所说,“答案”实际上取决于问题的上下文 您需要保护访问的具体内容是什么 一段数据或单个对象、某种容器中的项目、一段

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


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

答案取决于问题的上下文

您是否从某些API获取锁?检查API文档


但总的来说,我会说不。锁就是锁。使用它来保护文件或对象这一事实对API来说并不重要。如何使用它取决于你自己。如果愿意,您当然可以抽象出文件锁和对象锁,但这取决于您。

正如有人dss538所说,“答案”实际上取决于问题的上下文

您需要保护访问的具体内容是什么

一段数据或单个对象、某种容器中的项目、一段代码、系统资源(如共享文件)

另一个真正有意义的问题是,你访问这个“东西”的频率有多高,你打算用它做什么

不同的锁定技术往往会产生不同的开销,而对于很少访问和更新的内容,关键部分或互斥锁可能非常合适,如果您很少更新它并经常访问它,那么您可能需要查看读写器锁。这里的另一个后续问题是“我应该使用自旋锁吗?”这里的答案是这要视情况而定?系统中还发生了什么,您是否打算用一种瓶颈(粗粒度锁)来换取另一种瓶颈

我想问的最后一个问题是,“锁定”某物的替代方案是什么,也就是说,如果我可以“安全地”复制我受保护的东西并“安全地”使用该副本(理想情况下不修改它),这肯定比担心我可能修改的每个地方都会说“东西”容易得多

很抱歉我的回答含糊不清,但一个更具体的问题在这里会有所帮助

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


Wikipedia上的很多内容都很好,特别是“如果您的书架上没有一本好的操作系统/并发性书籍,它是一个有用的起始参考点。

您最好阅读一下操作系统并发性原则。谷歌快速搜索出了这个教程:@Rick:如果数据结构经常更新怎么办?