问题标签 [atomic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何安全地更新具有多个读者和一个作者的文件?
我有一组文件。该文件集在 NTFS 共享上是只读的,因此可以有许多阅读器。每个文件由一个具有写访问权限的写入者偶尔更新。
我如何确保:
- 如果写入失败,则表示之前的文件仍然可读
- 读者无法支撑单个作者
我正在使用 Java,我目前的解决方案是让作者写入一个临时文件,然后使用File.renameTo()
. 问题出在 NTFS 上,renameTo
如果目标文件已经存在则失败,因此您必须自己删除它。但是如果作者删除目标文件然后失败(计算机崩溃),我没有可读的文件。
nio 的 FileLock 只适用于同一个 JVM,所以对我来说没用。
如何使用 Java 安全地更新具有多个阅读器的文件?
delphi - 具有“线程安全”读/写操作的 Delphi 数据类型列表?
'布尔'变量对于从任何线程读取和写入是线程安全的吗?我已经看到一些新闻组引用说它们是。是否有任何其他数据类型可用?(枚举类型,也许是短整数?)
最好有一个可以从任何线程安全读取的所有数据类型的列表,以及另一个可以在任何线程中安全写入的列表,而无需求助于各种同步方法。
java - 生成唯一负数的非阻塞算法
我最近重构了一段用于生成唯一负数的代码。
编辑:多个线程获取这些 id 并作为键添加到数据库;数字需要为负数才能轻松识别 - 在测试会话结束时,它们会从数据库中删除。
我的 Java 算法如下所示:
上面的代码结构,加上它对集合和“重试”循环的推测性添加,让我觉得有一个等效的非阻塞算法可以用任何原子变量替换同步集合。
我做了几次尝试使用原子变量重写,但都没有通过多线程攻击测试。
有没有优雅的非阻塞等价物?
编辑:出于好奇,这是使用原子整数作为保护的有缺陷的尝试
编辑:下面的测试工具:
multithreading - 这是双重检查锁定的安全版本吗?
来自维基百科的规范破坏双重检查锁定的略微修改版本:
假设底层原子操作库正常工作,是否简单地使新创建的 Helper 实例原子的发布使这个双重检查锁定习语安全?我意识到在 Java 中,可以只使用volatile
,但即使该示例是伪 Java 中的,这也应该是一个与语言无关的问题。
也可以看看:
ios - 原子属性和非原子属性有什么区别?
财产声明中的含义atomic
和含义是什么?nonatomic
这三者在操作上有什么区别?
linq - can linq update and query atomically?
I need to get 1000 rows from a database, and at the same time tag them as 'in process'. This way, another thread can not take the same 1000 rows and process them as well.
With linq i do something like this:
msgs = (from m in database.messages where (m.status == MESSAGESTATUSINIT) select m).Take(1000).ToList();
ideally I would at the same time set the status to MESSAGESTATUSPROCESSING. Of course this MUST be atomic.
any ideas? Or is it back to SQL?
thanks!
assembly - x86 是否有一个原子增量来保留存储的值?
我发现lock inc addr
,但这并没有保留存储值的副本,甚至在同一个线程中立即读取也可能发生在竞争写入之后。
我发现的最佳解决方案是load
//循环inc
。cas
sql-server - MSSQL:在触发器执行过程中发生错误时会发生什么?
关于 MS SQL Server 的更新和插入触发器,有没有办法让它们成为原子的?也就是说,如果在触发过程中发生错误,是否可以自动回滚原来的插入或更新?
sql - 确保原子性 sql
我只是在阅读 RDBMS,RDBMS 的一个属性是原子性。因此,如果从一个帐户中提取资金并转移到另一个帐户,则交易要么完全发生,要么根本不发生。没有部分交易。但实际上如何保证?
上述场景的 Sql 查询可能看起来像 (i) UPDATE accounts
set balance = balance - amount WHERE ac_num = 101 (ii) UPDATE accounts
set balance = balance + amount WHERE ac_num = 102
这决不能确保原子性。那么它实际上是如何发生的呢?
c - 有没有办法在 C 中使函数原子化?
有没有办法在 C 中使函数原子化。
我不是在寻找便携式解决方案。(寻找平台 - Win,Linux)