atomicity相关内容

应该在两个LOCK_EX上读取&写原子的?

file_put_contents ( "file", "data", LOCK_EX ) 用于书写(这意味着-获取锁定并进行书写) file_get_contents ( "file", LOCK_EX ) 阅读(这意味着-获取锁然后阅读) 会抛出异常吗?引发错误?阻止直到获得锁? 或至少-应该吗? php是否有可能像这一天一样表现? 编辑:我知道可以使用重命名-我想知 ..
发布时间:2020-05-03 05:48:34 PHP

Linux内核模块原子模式

我正在开发linux内核模块以执行读/写操作. 它读取输入文件并将内容写入输出文件. 我必须在代码中引入原子模式. 我想知道是否有一种方法可以在原子模式下进行部分写入的情况下从写入的文件中还原更改. 如果程序出现错误,我想删除已写入输出文件的所有内容. 请回复. 解决方案 如果程序出现错误,我想删除已写入输出文件的所有内容. 我会避免为此目的开发内核模块. 您可 ..
发布时间:2020-05-02 03:51:25 服务器开发

重命名是原子的吗?

我无法通过实验进行检查,也无法从手册页中收集到它. 说我有两个过程,一个是将文件1从目录1移动(重命名)到目录2.假设正在运行的另一个进程同时将directory1和directory2的内容复制到另一个位置.复制是否可能以这种方式发生,即目录1和目录2都将显示文件1-即在第一个进程中,在移动之前复制了目录1,在移动之后复制了目录2. 基本上,rename()是原子系统调用吗? 谢谢 ..
发布时间:2020-05-01 08:12:32 服务器开发

如何在硬件级别实现原子操作?

我了解到,在汇编语言级别,指令集体系结构提供了比较,交换和类似的操作.但是,我不知道该芯片如何提供这些保证. 按照我的想象,指令的执行必须 从内存中获取值 比较值 根据比较结果,可能在内存中存储另一个值 是什么导致另一个内核在第一个内核获取内存地址之后但在设置新值之前无法访问该内存地址?内存控制器可以管理吗? 编辑:如果x86实现是秘密的,我很高兴听到任何处理器家族如何 ..
发布时间:2020-04-27 03:46:20 其他开发

原子指令

原子指令是什么意思? 以下内容如何变为原子? TestAndSet int TestAndSet(int *x){ register int temp = *x; *x = 1; return temp; } 从软件的角度来看,如果不想使用非阻塞同步原语,那么如何确保指令的原子性?只能在硬件上使用,还是可以使用某些汇编级别的指令优化? 解决方案 某些 ..

为卡夫卡生产者保证独特的全球交易

在Kafka 0.11.0.0的最新版本中,Apache团队正在引入幂等的生产者和交易. 是否可以保证要记录的整套消息(例如一百万条)仅在最后提交? 我希望这样,例如,如果生产者失去与经纪人的联系并且无法重新建立联系,那么消费者就不会看到任何消息.是否有可能? 解决方案 是的,可以使用生产者中的“交易"来实现.您开始一个事务,发布所有消息,然后提交该事务.所有消息一次都被写入Kafka,但 ..

iinc在Java中是原子的吗?

我知道在没有锁定的情况下,增量操作在C ++中不是原子的. JVM会在其iinc指令的实现中添加任何锁吗? 解决方案 没有它不是 获取c的当前值. 将检索到的值增加1. 将增量值存储回c中. 有关原子性和线程干扰的Java文档 为了线程安全,您需要使用synchronized关键字或使用AtomicXXX方法. 更新: public synchroniz ..
发布时间:2020-04-25 07:13:05 Java开发

有没有理由不总是使用AtomicInteger作为数据成员?

在像Android这样的多线程环境中,一个简单的 int 变量可能被多个线程操纵,在这种情况下仍然有理由使用 int 作为数据成员? 一个 int 作为局部变量,限于具有独占访问权限的方法的范围(因此开始和完成修改它总是在同一个线程中),在性能方面做得非常完美。 但作为数据成员,即使被访问者包装,也会遇到众所周知的并发交错修改问题。 所以看起来像要“安全地玩”,可以全面使用 At ..
发布时间:2019-01-08 12:33:14 Java开发

Java中变量读写的原子性

这是另一个我的问题。 @templatetypedef回答了问题(赞赏),并在他的回答中写道: 作为注释 - 原子性并不意味着“所有其他线程将被阻塞 ,直到值准备好。这意味着所有其他线程将看到 纯粹在操作完成之前或完全在 操作完成之后状态,但没有别的。 我有一个混乱关于这个,这就是原因: 它说这里: 原子动作不能交错,因此可以毫不费力地使用它们b $ b线程干扰 ..
发布时间:2019-01-07 16:35:26 Java开发

原子读写long和double值

long 和 double 读取和写入操作不是原子的,因为它们的大小超过了cpu字大小。 我可以获得 long 和 double的原子读写操作如果我有64位机器? 解决方案 所以我可以获得原子读写如果我有64位机器,则操作long和double? 答案是“可能”。答案取决于JVM实现以及机器架构。引用 Java语言定义17.7 : 某些实现可能会发现将64位长或双值上 ..
发布时间:2019-01-02 15:00:19 Java开发

字节码指令与处理器操作之间的关系

Java规范保证原始变量赋值始终是原子的(期望 long 和double types 。 相反, Fetch-and-Add 与着名的 i ++ 增量操作相对应的操作将是非原子操作,因为这会导致读 - 修改 - 写操作。 假设这段代码: public void assign(int b){ int a = b ; } 生成的字节码为: publi ..
发布时间:2018-12-26 13:50:51 Java开发

原子操作和多线程

最近我正在阅读一个教程,因为我遇到了一个声明,说明了.. “Java语言规范保证读取或写入变量是一个原子操作(除非变量的类型为 long 或 double )。类型为的操作变量long 或 double 只有在使用 volatile 关键字声明时才是原子的。“ AtomicInteger 或 AtomicLong 提供 getAndDecrement(), getAndIncremen ..
发布时间:2018-12-25 20:43:41 Java开发

关于volatile和Atomic类的一些疑问?

我将通过Java线程书。我发现了这个陈述 声明1: - “易变量只能安全地用于单个加载或存储操作,不能 应用于长变量或双变量。这些限制使得volatile变量的使用不常见“ 我没有得到单个加载或存储操作的含义?为什么不能将 应用于长期或双期变量? 语句2: - “易失性整数不能与++运算符一起使用,因为++运算符包含 多条指令.AtomicInteger类有一个方法,允许它 ..
发布时间:2018-12-21 19:56:22 Java开发

使用Java的Atomic类进行模块化增量

我很惊讶Java的AtomicInteger和AtomicLong类没有模块化增量的方法(因此在达到限制后值会回绕到零)。 我想我必须遗漏一些明显的东西。最好的方法是什么? 例如,我想在线程之间共享一个简单的int,我希望每个线程能够增加它,比方说, mod 10. 我可以创建一个使用同步/锁定的类,但有更好,更简单的方法吗? 解决方案 在 addModular() sy ..
发布时间:2018-12-20 01:02:14 Java开发

Java中的哪些操作被认为是原子的?

Java中的哪些操作被认为是原子的? 解决方案 原始类型的所有赋值除外long和double 所有引用分配 所有volatile变量赋值 java的所有操作。 concurrent.Atomic * classes 还可能更多。请查看 jls 。 如评论中所述,原子性并不意味着可见性。因此,虽然保证另一个线程不会看到部分写入 int ,但它可能永远不会看到新值。 ..
发布时间:2018-11-26 13:47:36 Java开发

何时使用Firebase交易

是否有必要使用保存数据作为交易技术,如果价值只增加?在示例Firebase文档社交博客应用程序中, starCount 可以上涨或下跌,所以使用Transaction Technic权利是合理的。但是,如果价值只会增加,我认为交易技术是不正确的?要么? 多个用户同时增加一个值。 解决方案 柜台可以长大或缩小,意味着用户可以点击计数器增加值,但如果再次点击,也可以减小该值。当我们使用交易时 ..
发布时间:2017-11-14 19:56:33 其他开发

如何在增加Firebase投票数量的同时防止重复投票?

我正在Firebase中建立一个实时轮询。每个投票都存储在一个列表字段中。为了防止不得不把每一个投票都拖到客户端来计算它们,我将每个选项的计数器缓存在计数器字段中。 poll1 counts choice1:5 choice2:2 choice3:10 choice4:252 选项 uid1:choice1 uid6:choice3 uid25:choice ..
发布时间:2017-11-10 19:38:47 其他开发