问题标签 [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 - AtomicInteger lazySet 与 set
lazySet
和的set
方法有什么区别AtomicInteger
?该文档没有太多要说的lazySet
:
最终设置为给定值。
似乎存储的值不会立即设置为所需的值,而是计划在将来的某个时间设置。但是,这种方法的实际用途是什么?有什么例子吗?
assembly - 禁用硬件和软件中断
是否可以使用 ASM/C/C++ 程序禁用所有中断以完全控制处理器?
如果是 - >如何?
如果不是->“原子”操作系统调用如何工作(例如进入关键部分)?
谢谢你的帮助!
performance - 我可以在 x86/x86_64 上原子地增加一个 16 位计数器吗?
我想通过将现有的 32 位计数器转换为 16 位计数器来节省内存。这个计数器是原子递增/递减的。如果我这样做:
- 我对 x86/x86_64 上的 atomic_inc(uint16_t x) 使用什么指令?
- 这在多处理器 x86/x86_64 机器中是否可靠?
- 这样做是否会对这些架构中的任何一个造成性能损失?
- 如果 (3) 是,那么预期的性能损失是多少?
感谢您的意见!
c - C中的位域掩码
C 中是否有一种可移植的方式来在编译时找出位字段的掩码?
理想情况下,我希望能够以原子方式清除这样的字段:
否则我必须对结构进行锁定,这比我想要的要重。
ado.net - ADO.NET中数据适配器的原子性
我是 ADO.NET 的新手并正在学习它。我想知道 ADO.NET 中的数据适配器是否在填充数据集和更新数据库时自行提供原子性或 ACID 属性,或者我们是否必须显式使用事务来实现这一点。
比方说:
- 我想通过数据适配器从数据库中获取数据到数据集
- 向网站发送一些信息
- 对数据集中的数据进行一些更改
- 使用 DataAdapter.Update(DataSet) 更新数据库
我希望所有步骤(如果需要可以排除第一步,因为它将是一个可以一次性获取的离线数据)一次完成,原子地,我需要一个事务吗?如果不是如何实现这一点?
multithreading - 原子操作在进程间的工作方式是否与它们在线程间的工作方式相同?
显然,原子操作确保不同的线程不会破坏一个值。但是,当使用共享内存时,跨进程是否仍然如此?即使这些进程碰巧被操作系统安排在不同的内核上运行?还是跨不同的不同 CPU?
编辑:另外,如果它不安全,即使在像 Linux 这样的操作系统上也不安全,从调度程序的角度来看,进程和线程是相同的?
multithreading - 什么时候无锁数据结构的性能低于互斥(互斥体)?
我在某处(再也找不到该页面)读到无锁数据结构“对于某些工作负载”更有效,这似乎意味着有时它们实际上速度较慢,或者在某些情况下它们的收益可能为零。对我来说,使用锁定指令的约 100 个周期来执行原子操作听起来比进入睡眠状态并等待调度程序唤醒进程备份要快得多,所以在什么情况下无锁数据结构对我来说并不明显不如老式的互斥锁更可取。如果锁在 99% 的时间内都可用并且进程不必进入睡眠状态,那么互斥锁会更快吗?假设有合适的无锁数据结构可用,是否有一个好的经验法则可以知道该走哪条路?
multithreading - 随着更多 CPU 的添加,原子操作会变慢吗?
x86 和其他架构提供了特殊的原子指令(lock、cmpxchg 等),允许您编写“无锁”数据结构。但是随着越来越多的内核被添加,这些指令实际上必须在幕后完成的工作似乎会增加(至少要保持缓存一致性?)。如果今天在双核系统上原子添加需要大约 100 个周期,那么在未来的 80 多核机器上可能需要更长的时间吗?如果您要编写持久的代码,那么使用锁实际上可能是一个更好的主意,即使它们今天速度较慢?
multithreading - 当多线程仍然是现代 CPU 上的一个问题时,是否部分更新了值?
来自关于 Read-Copy-Update 的维基百科文章:
与读取器同时运行删除阶段是安全的原因是现代 CPU 的语义保证读取器将看到数据结构的旧版本或新版本,而不是部分更新的引用。
这适用于所有现代 CPU(ARM、x86、PPC 等)吗?未来有可能改变吗?只要您不介意可能再次获得旧值,就永远不需要支付锁定加载的成本似乎非常好(这对于许多应用程序来说可能不是问题——基本上对于任何可以使用的应用程序来说)读取-复制-更新)。
svn - Subversion 中原子提交的价值是什么?
我正在尝试创建和遵循版本控制的最佳实践,并在 Subversion 中遇到了对原子提交的引用。由于我从未听说过此操作,因此我对此有一些疑问。
- 它的目的是什么?
- 什么时候应该使用它?
- 它与普通提交有何不同?
- TortoiseSVN用户可以使用它吗?如果是这样,怎么做?