atomicity相关内容
我一直在REST API中使用POST创建对象.服务器偶尔会创建对象,但是客户端将在收到201 Created响应之前断开连接.客户端仅看到失败的POST请求,然后稍后重试,服务器愉快地创建了一个重复的对象... 其他人一定有这个问题,对吧?但是我四处搜寻,每个人似乎都忽略了它. 我有2个解决方案: A)改用PUT,然后在客户端上创建(GU)ID. B)向在客户端上创建的所
..
在某些情况下,编码人员不能依赖于原子的系统调用,例如如果文件在NFS文件系统上. (参见 NFS概述,常见问题解答和HOWTO文档).但是,大多数数据库工作最终都需要原子系统调用. (请参见数据库系统的原子性). 在C(或python)中的特定FILE上是否存在一种标准的(且与操作系统无关的)确认写入(和其他系统调用)是原子的方式. 有什么建议吗? 后续注释:管道的原子性将在下面
..
我试图理解原子和非原子操作.关于操作系统以及关于C的知识. 根据Wikipedia页面此处 考虑一个简单的计数器,不同的进程可以递增该计数器. 非原子 天真的,非原子的实现: 读取存储位置中的值; 将值加一; 将新值写回到存储位置. 现在,假设有两个进程正在运行,以增加一个共享内存位置: 第一个进程读取内存位置中的值; 第一个过程将值加一个; 但在它可以将新值写回到
..
OpenCL和CUDA包含原子操作已经有好几年了(尽管显然不是每个CUDA或OpenCL设备都支持原子操作).但是-我的问题是,由于非原子性的写作,种族可能“生活在一起". 假设网格中的多个线程都写入全局内存中的同一位置.我们是否保证在内核执行结束后,这些写入之一的结果将出现在该位置,而不是出现垃圾? 此问题的相关参数(选择任何组合,编辑,除了nVIDIA + CUDA以外,它已经得到
..
如果我有这样的程序(使用伪代码): mutex_lock; func() { lock(mutex_lock); // Some code (long enough to make a // race condition if no proper synchronisation // is available). We also going to call a
..
我正在实现一个日志记录,其中多个线程可以写入一个List日志.最后一个线程应将List的内容写入文件.因此,最后写入List的线程应将List刷新到文件中.最好的方法是什么? 对于List,我只需要对多个作者和一个读者有效的并发类之一. 解决方案 对于我来说,简单的解决方案是实现Closeable,然后使用close方法进行刷新.
..
我需要创建一个方法调用程序,任何线程(例如,线程B)都可以调用该方法调用程序,该方法调用程序将在执行的主执行线程(Thead A)上的特定给定时间执行. 示例用法如下: static Invoker Invoker = new Invoker(); static void ThreadA() { new Thread(ThreadB).Start(); Thread
..
我的以下方法线程安全吗?此方法在Singleton类中. private static final Map holder = new ConcurrentHashMap(); public BoundStatement getStatement(String cql) { Session session = Test
..
关于内存可见性的小问题. CodeSample1: class CustomLock { private boolean locked = false; public boolean lock() { if(!locked) { locked = true; return true; }
..
我知道 atomic 通常用于种族条件的上下文中,并且意味着诸如 consistency 和确定性结果之类的东西根据多线程/多处理环境.没关系.但是最近我读到了Linux中的原子系统调用,却不明白 atomic 在这里实际上是什么意思,即如何这种 atomicity 是已实现.这是否意味着该系统调用仅使用对资源的锁定(例如,目标文件inode上的open())还是还有其他内容,也许可以保证某些内核
..
C ++ 0x指定用于线程安全原子访问变量的std::atomic模板.除其他外,该模板具有成员函数 std :: atomic: :exchange 以原子方式在"this"中存储一个新值,并检索"this"的现有值. Win32具有类似的功能: 现在,这些操作很简单:原子读取-修改. 我不理解的是此操作的要点.返回的读取值是“无意义的",因为一旦我可以检查返回值,另一个线程可
..
我通过调用add方法从多个线程填充我的番石榴缓存.现在,从每30秒运行一次的后台线程,我想将缓存中的所有内容自动发送给sendToDB方法? 下面是我的代码: public class Example { private final ScheduledExecutorService executorService = Executors .newSingleThread
..
问题在于何时将64位加载/存储操作视为原子操作. 如果我有64位处理器,但我使用的是32位OS.我会拥有64位原子性吗? 如果我使用的是64位操作系统,但正在运行32位的应用程序(使用WoW64),我会拥有64位的原子性吗? 解决方案 该应用程序必须在64位OS上并以本机64位模式运行,以毫无疑问地获得x64的优势.如果您在32位操作系统(带有32位应用程序)上以32位模式运行,则
..
在Ruby中,如果array被许多线程修改,则此代码不是线程安全的: array = [] array
..
有关内存顺序的cppreference文档说 放松内存排序的典型用法是递增计数器,例如std :: shared_ptr的引用计数器,因为这仅需要原子性,而不需要排序或同步(请注意,递减shared_ptr计数器需要获取释放同步与析构函数) 这是否意味着宽松的内存排序实际上不会导致针对同一变量的原子性?但是,是否最终会导致相对于其他宽松的内存负载和/或compare_exchange的
..
如果mem是共享内存位置,我是否需要: XCHG EAX,mem 或: LOCK XCHG EAX,mem 原子交换吗? 使用谷歌搜索会得到肯定和否定答案.谁能确切地知道这一点? 解决方案 Intel的文档似乎很清楚,它是多余的. IA-32英特尔®架构 软件开发人员手册 第3A卷: 系统编程指南,第1部分 7.1.2.1说: 处理器自动遵循LO
..
在我阅读的大多数讨论中,它表明将属性设为原子并不保证它是线程安全的,它只是保证所返回的值不会由于一个对象写入而成为垃圾.它和另一个试图同时阅读它. 我知道这不是线程安全的,因为第三个对象可能正在写它,而访问它的对象不会得到垃圾回收,但是并不确定当多个对象正在写入时它将返回哪个值同时,它可能会获得它们的任何值. 因此,当我们说它不会返回垃圾时,垃圾的含义是,如果一个对象不是原子的,而另一
..
在mongodb手册上,有一个示例用于单个文档的原子操作. book = { _id: 123456789, title: "MongoDB: The Definitive Guide", available: 3, checkout: [ { by: "joe", date: ISODate("2012-10-
..
我们有一些旧的应用程序,它们通过基于目录的队列进行通信.队列中的每个项目都是一个文件,并且有一个头文件,该文件维护队列中项目的文件名的有序列表. 自然,此旧代码需要在推送和弹出项目时锁定队列.它的工作是在假定mkdir()是原子操作的情况下创建一个锁子目录-如果多个进程尝试创建目录,则其中只有一个会成功. 我的一位同事一直试图解决一个晦涩的问题,他认为原因是,当进程在不同的计算机上运行
..
我花了几个小时来研究行为,首先是关于这些问题: 对本地文件系统的write(2)原子性 如何我可以同步-使原子化-从两个进程中写入一个文件吗? 如何会以编程方式确定是否“写入"程序.系统调用在特定文件上是原子的吗? http://article.gmane.org/gmane.linux.kernel/43445 如果在打开文件时使用'O_APPEND'标志,则在Linux上从多
..