atomic相关内容

为什么 std::atomic 对象不可复制?

似乎 std::atomic 类型不是可复制构造或可复制分配的.为什么? 是否存在无法复制原子类型的技术原因?还是故意限制接口以避免某种不良代码? 解决方案 技术原因:大多数原子类型不能保证是无锁的.原子类型的表示可能需要包含一个嵌入的互斥体,而互斥体是不可复制的. 逻辑原因:复制原子类型意味着什么?整个复制操作应该是原子的吗?副本和原件代表相同原子对象吗? 对于跨越 ..
发布时间:2021-11-30 14:50:16 C/C++开发

应该 LOCK_EX 在读取和写是原子的?

file_put_contents ( "file", "data", LOCK_EX ) 用于写入(这意味着 - 获取锁定和写入) file_get_contents ( "file", LOCK_EX ) 用于读取(即 - 获取锁然后读取) 会抛出异常吗?引发错误?阻塞直到获得锁?或者至少 - 应该?php 有没有可能有一天会变成这样? 编辑:我知道可以使用重命名 - 我想知 ..
发布时间:2021-11-30 14:50:08 PHP

我是否必须使用 atomic<bool>用于“退出"布尔变量?

我需要为另一个线程设置一个标志以退出.另一个线程不时检查退出标志.我必须对标志使用 atomic 还是只使用普通 bool 就足够了,为什么(举个例子,如果我使用普通 bool 可能会出错)? #include 布尔退出 = 假;void thread_fn(){而(!退出){//做东西如果(退出)中断;//做东西}}int main(){自动 f = std::async(std::launc ..
发布时间:2021-11-30 14:49:57 C/C++开发

在 MySQL 中增加一个字段是原子的吗?

我正在制作一个网站,我想在标准 MyISAM 表中增加一个计数器. 简化示例: UPDATE 票数 SET num = num + 1; 如果多个连接执行相同的查询,这会导致问题吗,或者 MySQL 会处理它并锁定表或其他东西以确保没有冲突吗? 解决方案 MyISAM 表使用表级锁定.这意味着在执行更新查询期间将锁定整个表.所以你的简化用例的答案是:是的,这是线程安全的.但如果您 ..
发布时间:2021-11-30 14:49:50 数据库

Java:没有 AtomicFloat 或 AtomicDouble 吗?

我找到了AtomicInteger、AtomicLong,但是AtomicFloat(或AtomicDouble)在哪里?也许有什么技巧? 解决方案 java.util.concurrent package 声明如下: [...] 此外,只为那些在预期应用程序中通常有用的类型提供类.例如,没有用于表示字节的原子类.在您希望这样做的罕见情况下,您可以使用 AtomicInteger 来 ..
发布时间:2021-11-30 14:49:43 Java开发

什么时候在 Java 中使用 volatile boolean 而不是 AtomicBoolean 更可取?

我查看了 SO 中的其他 volatile 与 Atomicxxxx 问题(包括这个) 并已阅读 java.util.current.atomic 的描述,我对其中的细微差别不太满意. 如果我试图在使用 volatile boolean 和 AtomicBoolean 之间做出决定,除了 AtomicBoolean 提供的原子读-修改-写操作之外,还有实际区别吗?(例如 compareAnd ..
发布时间:2021-11-30 14:49:33 Java开发

AtomicInteger lazySet 与 set

AtomicInteger 的 lazySet 和 set 方法有什么区别?文档 对 lazySet 没什么好说的: 最终设置为给定的值. 似乎存储的值不会立即设置为所需的值,而是会安排在将来的某个时间设置.但是,这种方法的实际用途是什么?有什么例子吗? 解决方案 直接引用自 “JDK-6275329:向原子类添加lazySet方法": 可能是 Mustang 的最后一个 ..
发布时间:2021-11-30 14:49:23 Java开发

如何以原子方式更新最大值?

在串行代码中,更新最大值可以简单地通过 templatevoid update_maximum(T& maximum_value, T const& value) noexcept{如果(值>maximum_value)maximum_value = value;} 但是,对于保存最大值的atomic变量应该如何做: templatevoid update_maximum(std::atom ..
发布时间:2021-11-30 14:49:15 C/C++开发

C++ 中的原子性:神话还是现实

我一直在阅读一篇关于无锁编程的文章在 MSDN 中.它说: 在所有现代处理器上,您都可以假设读取和写入自然对齐的原生类型是原子的.只要内存总线是至少与类型一样宽读或写,CPU 读取和在单个总线中写入这些类型交易,使其无法其他线程以查看它们半完成状态. 它给出了一些例子: //这个写不是原子的,因为它不是本机对齐的.DWORD* pData = (DWORD*)(pChar + 1); ..
发布时间:2021-11-30 14:49:05 C/C++开发

为什么在整个 std::atomic 中使用 volatile 限定符?

根据我从 Herb Sutter 中读到的内容 和 其他 你会认为 volatile 和并发编程是完全正交的概念,至少就 C/C++ 而言是这样. 然而,在 GCC 实现中的所有std::atomic 的成员函数具有 volatile 限定符.在 Anthony Williams 的 implementation std 中也是如此::原子. 那有什么关系,我的atomic 变量是否需 ..
发布时间:2021-11-30 14:48:57 C/C++开发

每个 memory_order 是什么意思?

我读了一章,但不太喜欢.我仍然不清楚每个内存顺序之间的区别是什么.这是我目前的推测,在阅读了更简单的 http://en.cppreference.com/w/cpp/atomic/memory_order 以下内容有误,请勿学习 memory_order_relaxed:不同步,但在不同原子变量中从另一种模式完成订单时不会被忽略 memory_order_consume:同步读取这 ..
发布时间:2021-11-30 14:48:49 C/C++开发

是否有任何原子 javascript 操作来处理 Ajax 的异步性质?

我正在从服务器动态加载代码(函数)并将其作为 javascript 代码执行,然后将其存储在数组中并执行.所有这些代码片段必须只执行一次.伪代码如下 function fetch(foo){如果(fooArray 中的 foo){//没做什么别的{//通过ajax获取foo并执行foo()}} 问题要复杂得多,但基本上如果我发出以下命令 fetch('someFunctionName');f ..
发布时间:2021-11-30 14:48:40 前端开发

rename() 是原子的吗?

我无法通过实验检查这一点,也无法从手册页中收集到它. 假设我有两个进程,一个是将文件 1 从目录 1 移动(重命名)到目录 2.假设同时运行的另一个进程将 directory1 和 directory2 的内容复制到另一个位置.复制是否有可能以这样的方式发生,即目录 1 和目录 2 都将显示文件 1 - 即目录1 在移动之前被复制,目录2 在移动之后被第一个进程复制. 基本上是 ren ..
发布时间:2021-11-30 14:48:29 服务器开发

如何在 C# 中以原子方式交换 2 个整数?

x86 asm 的 C# 等价物是什么(如果有)xchg 指令? 使用该命令,哪个 imo 是真正的交换(与 Interlocked.Exchange 不同),我可以简单地以原子方式交换两个整数,这正是我真正想要做的. 更新: 基于我的建议的示例代码.后缀“_V"的变量被修饰为 volatile: //第 3 部分 - 流程链接//准备新的生产者address.Producer ..
发布时间:2021-11-30 14:48:21 C#/.NET

我什么时候真的需要使用 atomic<bool>而不是布尔?

atomic 不是多余的,因为 bool 本质上是原子的吗?我认为不可能有部分修改的 bool 值.我什么时候真的需要使用 atomic 而不是 bool? 解决方案 没有 C++ 中的类型是“原子性的",除非它是 std::atomic*-某物.那是因为标准是这么说的. 在实践中,用于操作 std::atomic 的实际硬件指令可能(也可能不)与普通 bool 相同code>,但原 ..
发布时间:2021-11-30 14:48:13 C/C++开发

在 x86/x86_64 处理器上使用 LFENCE 指令有意义吗?

通常在互联网上,我发现 LFENCE 在 x86 处理器中毫无意义,即它什么也不做,因此我们可以完全轻松地使用 SFENCE,因为 MFENCE = SFENCE + LFENCE = SFENCE + NOP =SFENCE. 但是如果 LFENCE 没有意义,那么为什么我们有四种方法可以在 x86/x86_64 中实现顺序一致性: LOAD(无围栏)和 STORE + MFENCE ..
发布时间:2021-11-30 14:48:06 其他开发

IEnumerable Linq 方法线程安全吗?

我想知道 Linq 扩展方法是否是原子的?或者我是否需要在任何类型的迭代之前lock任何跨线程使用的IEnumerable对象? 将变量声明为 volatile 是否对此有任何影响? 总而言之,以下哪个是最好的线程安全操作? 1- 没有任何锁: IEnumerable_objs =//...var foo = _objs.FirstOrDefault(t =>//一些条件 2 ..
发布时间:2021-11-30 14:47:59 C#/.NET

原子 x86 指令与 MS 的 InterlockedCompareExchange 文档的对齐要求?

Microsoft 提供了 InterlockedCompareExchange 用于执行原子比较和交换操作的函数.还有一个 _InterlockedCompareExchange 内在. 在 x86 上,这些是使用 lock cmpxchg 指令实现的. 然而,通读关于这三种方法的文档,他们似乎在对齐要求上不一致. 英特尔的参考手册 没有提及对齐(除了那如果对齐检查已启用并且进 ..
发布时间:2021-11-30 14:47:39 其他开发

如何在 C++ 中声明原子向量

我打算声明一个原子变量向量,用作多线程程序中的计数器.这是我尝试过的: #include #include int main(void){std::vector>v_a;std::atomica_i(1);v_a.push_back(a_i);返回0;} 这是gcc 4.6.3令人讨厌的冗长错误信息: 在/usr/include/c++/4.6/x86_64-linux-gnu/./bits ..
发布时间:2021-11-30 14:47:32 C/C++开发