Questions tagged «locks»

5
自旋锁与轮询有何不同?
自旋锁和轮询是同一件事吗? 维基百科: 自旋锁是一种锁,它使试图获取它的线程在循环中反复等待(“自旋”),而反复检查该锁是否可用 这听起来非常像: while(!ready); 我被教导要避免轮询,因为它是完全次优的。那么,自旋锁是否适合不良的旧民意测验?自旋锁与轮询有何不同?
41 locks  kernel  polling 

5
不变性是否完全消除了多处理器编程中对锁的需求?
第1部分 显然,不变性可以最大程度地减少多处理器编程中对锁的需求,但是它消除了这种需求吗?还是存在仅不变性还不够的情况?在我看来,您只能推迟处理和封装状态,直到大多数程序必须实际执行某些操作(更新数据存储,生成报告,引发异常等)之前。这样的动作能否始终不加锁地进行?扔掉每个对象并创建一个新对象而不是更改原始对象(对不变性的粗略看法)的纯粹行动是否提供了对进程间争用的绝对保护,还是有些仍然需要锁定的情况? 我知道很多函数式程序员和数学家都喜欢谈论“无副作用”,但是在“现实世界”中,所有事情都有副作用,即使这是执行机器指令所需的时间。我对理论/学术答案和实际/现实答案都感兴趣。 如果不变性是安全的,那么在给定某些界限或假设的情况下,我想知道“安全区”的边界到底是什么。可能的边界的一些示例: 输入输出 异常/错误 与其他语言编写的程序的交互 与其他机器(物理,虚拟或理论上的机器)的交互 特别感谢@JimmaHoffa 的评论,这开始了这个问题! 第2部分 多处理器编程通常用作优化技术-使某些代码运行更快。什么时候使用锁和不可变对象更快? 考虑到阿姆达尔定律所规定的限制,与可变对象锁定相比,什么时候可以实现更好的整体性能(考虑或不考虑垃圾收集器)? 摘要 我将这两个问题合并为一个,以尝试了解边界不变性在哪里作为线程问题的解决方案。

3
我应该在锁语句中放置多少工作?
我是一名初级开发人员,致力于为从第三方解决方案接收数据,将其存储在数据库中,然后将数据整理以供其他第三方解决方案使用的软件编写更新。我们的软件作为Windows服务运行。 查看以前版本中的代码,我看到以下内容: static Object _workerLocker = new object(); static int _runningWorkers = 0; int MaxSimultaneousThreads = 5; foreach(int SomeObject in ListOfObjects) { lock (_workerLocker) { while (_runningWorkers >= MaxSimultaneousThreads) { Monitor.Wait(_workerLocker); } } // check to see if the service has been stopped. If yes, then exit if (this.IsRunning() == …
27 c#  .net  concurrency  locks 

4
是什么阻止了锁上的竞争状况?
我了解什么是数据竞争,以及锁/互斥/信号灯如何防止它们的基础知识。但是,如果锁本身具有“竞赛条件”,会发生什么?例如,可能在同一应用程序中但在不同处理器上运行的两个不同线程尝试在完全相同的时间获取锁。 那会发生什么呢?为防止这种情况该怎么做?这是不可能的,还是完全不可能?还是等待发生的真实比赛条件?

6
在电子商务网站中将并发管理到篮子的最佳实践
管理两个客户同时添加库存仅为1个产品的情况的最佳实践是什么? 必须在购物篮的代码中进行检查,以避免这2个客户之一添加相同的产品? 还是必须在付款阶段执行此检查,例如进行第二次查询以确认相关产品仍在库存中(即并发客户尚未购买的产品)?

1
最佳实践是不轮询...但是当线程调用wait()时,轮询是否不会在内部进行?
假设我们有一些线程想要检查另一个线程何时完成其任务。我已经读到我们应该调用一个wait()类型的函数,该函数将使该线程等待,直到它收到另一个线程完成的通知。这样做很好,因为这意味着我们不会执行昂贵的轮询。 但是反正不是在内部进行较低级别的轮询吗?也就是说,如果我们使线程wait()是内核不执行轮询来检查另一个线程何时完成,以便它可以随后通知第一个线程? 我想我在这里错过了什么,有人可以启发我吗?

2
为什么Akka对并发有好处?
我是Akka和actor框架的新手-我确信我缺少明显的东西,请提前接受我的道歉。 我一直在读,选择Akka的主要要点之一是它管理并发的方式。 我不清楚Akka为什么如此特别。我知道有很多小演员非常轻快。但是,当两个用户同时保存一个表单时,这对我有什么帮助? 我是否还需要某种并发锁(悲观/乐观/等等)?

4
PHP file_put_contents文件锁定
Senario: 您有一个文件,每行上都有一个字符串(平均句子价值)。为了争辩,可以说这个文件的大小为1Mb(几千行)。 您有一个脚本来读取文件,更改文档中的某些字符串(不仅是追加,而且还要删除和修改某些行),然后用新数据覆盖所有数据。 问题: “服务器” PHP,OS或httpd等是否已经有适当的系统来阻止此类问题(在写入过程中进行读取/写入)? 如果可以,请说明其工作原理,并提供示例或相关文档的链接。 如果没有,我是否可以启用或设置某些东西,例如将文件锁定直到写入完成,并且使所有其他读取和/或写入失败,直到上一个脚本完成写入? 我的假设和其他信息: 该服务器正在运行PHP和Apache或Lighttpd。 如果脚本是由一个用户调用的,并且正在写入文件的一半,而另一位用户在该确切时刻读取了文件。阅读该文档的用户将无法获得完整的文档,因为该文档尚未编写。(如果这个假设是错误的,请纠正我) 我只关心PHP写入和读取文本文件,尤其是函数“ fopen” /“ fwrite”,主要是“ file_put_contents”。我查看了“ file_put_contents”文档,但未找到详细程度或对“ LOCK_EX”标志的含义或作用的很好解释。 该方案是最坏情况的一个示例,在该示例中,我认为由于文件的大尺寸和数据的编辑方式,这些问题更有可能发生。我想了解更多有关这些问题的信息,不需要或不需要诸如“使用mysql”或“为什么要这么做”之类的答案或注释,因为我没有这样做,我只想了解文件读/写使用PHP,似乎并没有找到正确的位置/文档,是的,我理解PHP并不是用这种方式处理文件的理想语言。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.