问题标签 [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.

0 投票
4 回答
1197 浏览

multithreading - 锁(线程)是原子的吗?

这听起来像是一个愚蠢的问题,但如果一个人在多线程应用程序中锁定了一个资源,那么在资源上发生的操作,是原子完成的吗?

IE:处理器是否会被中断,或者当该资源被锁定时是否会发生上下文切换?如果是这样,那么在它被安排回来完成它的进程之前,没有其他东西可以访问这个资源。听起来像是一项昂贵的手术。

0 投票
2 回答
812 浏览

c++ - 相互竞争的原子操作会互相饿死吗?

想象一个有两个线程的程序。他们正在运行以下代码(CAS 指的是比较和交换):

线程 B 是否有可能永久导致线程 A 的 CAS 失败,从而永远不会将 0xdeadbeef 写入“测试”?或者自然调度抖动是否意味着在实践中这永远不会发生?如果在线程 A 的 while 循环中完成了一些工作怎么办?

0 投票
4 回答
9284 浏览

c - fwrite 是原子的吗?

一个简单的问题:

我需要在我的程序中添加一些日志记录。

如果两个进程在同一个文件上使用“fwrite”但不是同一个文件描述符,则写入的日志消息将是原子的或混合的。有长度限制吗?

它是定义的 ANSI-C 行为还是定义的实现?如果稍后在 MacOSX、Linux 和 Windows MSVC 上是什么?

0 投票
4 回答
3338 浏览

.net - .NET 下的原子文件拷贝

我正在构建一个使用 System.IO.File.Copy(...) 函数复制文件的服务器应用程序。我的文件可能相当大,因此,如果机器崩溃,它很有可能在复制过程中发生。

重新启动服务后,我应该能够拿起复制任务并继续。如何检测副本是否已成功完成或因服务器崩溃而中断?

我目前的计划是将文件复制到一个临时名称,并在复制完成后将其重命名为最终名称。这样,文件命名就能够在崩溃时携带状态信息。

你有什么好的/更好的建议吗?

编辑:目标操作系统是 Win2003,因此事务性 NTFS 不可用

0 投票
2 回答
1248 浏览

.net - File.Delete() 在 .NET 下是原子的吗

目标操作系统:Win2003

正如其他关于文件操作原子性的 SO 问题中所发布的那样,Win32 根本不是为事务设计的。我仍然想知道文件删除是否可以是非原子的。毕竟,它要么被删除,要么不被删除。或者文件是否可以在 NTFS 文件系统上因系统崩溃或删除过程中的其他原因而保持在任何其他中间状态?

0 投票
6 回答
9033 浏览

c# - C# multithreaded list operations

If I have something like this (pseudocode):

is it possible that I run into multithreading problems (or any kind of unexpected behavior) when both functions are executed in parallel?

The use case is a list of errors, which could be cleared at any time (by simply assigning a new, empty list).

EDIT: My assumptions are

  • only one thread adds elements
  • forgotten elements are okay (i.e. race condition between clearing and adding a new element), as long as the clear operation succeeds without problems
  • .NET 2.0
0 投票
4 回答
7893 浏览

objective-c - BOOL 在 Objective C 中是读/写原子的吗?

当两个线程“同时”将 BOOL 设置为 YES 时会发生什么?

0 投票
9 回答
29074 浏览

c++ - 如何在 Linux 上执行适用于 x86、arm、GCC 和 icc 的原子操作?

如今,每个现代操作系统都提供了一些原子操作:

  • Windows 有Interlocked*API
  • FreeBSD 有<machine/atomic.h>
  • 索拉里斯有<atomic.h>
  • Mac OS X 有<libkern/OSAtomic.h>

Linux有类似的东西吗?

  • 我需要它在大多数 Linux 支持的平台上工作,包括:x86、x86_64 和 arm
  • 我需要它至少在 GCC 和 Intel 编译器上工作。
  • 我不需要使用像 glib 或 qt 这样的 3rd par 库。
  • 我需要它在 C++ 中工作(不需要 C)

问题:

  • 并非所有平台 (ARM) 都支持GCC atomic builtins __sync_*,英特尔编译器也不支持。
  • AFAIK<asm/atomic.h>不应该在用户空间中使用,我根本没有成功使用它。另外,我不确定它是否适用于英特尔编译器。

有什么建议么?

我知道有很多相关的问题,但其中一些指向__sync*这对我 (ARM) 来说是不可行的,还有一些指向asm/atomic.h.

也许有一个内联汇编库可以为 GCC 执行此操作(ICC 支持 gcc 汇编)?

编辑:

仅针对添加操作有一个非常部分的解决方案(允许实现原子计数器,但不允许实现需要 CAS 的无锁结构):

如果您使用libstc++(英特尔编译器使用libstdc++),那么您可以使用在或__gnu_cxx::__exchange_and_add中定义的那个。取决于编译器版本。<ext/atomicity.h><bits/atomicity.h>

但是我仍然希望看到支持 CAS 的东西。

0 投票
5 回答
4030 浏览

c - 执行原子操作的函数

C运行时库或任何其他实用程序库是否支持执行原子操作(如整数的递增/递减)等功能?

如果是,使用这些函数可以使所有操作成为原子操作吗?

使用这些功能会比互斥锁等普通同步原语更有益吗?

操作系统:Windows、Linux、Solaris 和 VxWorks

0 投票
3 回答
1051 浏览

c++ - 便携式 c++ 原子交换(Windows - GNU/Linux - MacOSX)

是否有免费的可移植(Windows、GNU/Linux 和 MacOSX)库提供无锁原子交换功能

如果不是,如何为这些平台中的每一个实施它?(带有 VC++ 或 g++ 的 x86)

谢谢