- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
请注意,我已经知道并了解 ABA problem .这个问题是关于 .NET 内存模型在 ABA 方面的行为。
在他对 Lock-Free LIFO Stack 的讨论中(2007 年 5 月 MSDN 杂志的 CLR Inside Out 专栏),Joe Duffy 说:
“我们为每个 Push 分配对象,使我们不必担心所谓的 ABA 问题。”
然后他继续非常简要地描述了 ABA 问题,并提到这可能发生在原生 C/C++ 中,因为内存分配器可以在地址被释放后立即重用它。
一切都很好。但是,是什么让 .NET 程序不受 ABA 问题的影响呢?他是在暗示因为不能立即重用节点(即节点超出范围和 GC 收集它之间存在一些延迟)所以不可能发生 ABA 问题?如果是这样,做出这样的断言是否安全?
我将首先承认我不知道 .NET 内存分配器或垃圾收集器的所有复杂之处,但我有限的理解使我相信引用可以重用。如果有可能重用引用,那么这是否会使 ABA 问题成为可能(如果确实极不可能)?
最佳答案
如果线程 1 在内存地址 X 处有一个对象引用,那么根据定义,线程 2 所做的任何事情都不会导致另一个对象使用同一地址。该对象仍然存在,并且它的地址不会被重用,直到没有对它的引用。这保证了——当互锁交换操作返回我们期望的值时——ABA 问题没有发生。
关于c# - 避免 .NET 代码中的 ABA 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666954/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一年级的学生,目前正在学习“C”。这是我真正碰壁的第一个任务,任务是: “创建一个函数,它接收一个字符串指针和一个字符串大小的指针。字符串本身包含一个句子。该函数将返回一个指向最大字典大小单词开头
我必须运行一个相当旧的程序代码,它使用 ABA-provider for JCE。所有类都可以在源文件夹中找到。但是,会出现 NoSuchProviderException:“JCE 无法验证提供程序
我正在尝试从 here 实现 Michael-Scott FIFO 队列。我无法实现他们针对 ABA 问题的解决方案。我收到此错误。 error: incompatible type for argu
我目前正在使用 C++11 开发无锁单链表,我的 popFront() 函数有问题——或者我至少应该说我知道它在某些情况下会出现问题。 无论如何,这就是我目前拥有的: std::shared_ptr
在书中C++ Concurrency in Action ,作者给出了一个使用hazard pointer实现无锁栈数据结构的例子。部分代码如下: std::shared_ptr pop() {
我在维基百科的实践书中调查了并发中的 ABA 问题,我阅读了以下内容 post 据我所知,ABA 问题的根本原因是在算法中我们检查的状态与以前相同,但算法暗示状态未被触及。 堆栈数据结构示例: 我们使
我读了一篇描述 ABA 问题的文章,但有些东西我无法理解。我有源代码,它无法运行,它类似于文章中的示例,但我不明白这个问题。这是文章 http://fara.cs.uni-potsdam.de/~js
在给定两个字符的出现频率(例如:x = 5)的情况下,建议一种使用两个字符(例如:“aabba”、“aba”)的模式构造 String 的有效方法, y = 4).问题是任何字符都不应重复超过两次。
请注意,我已经知道并了解 ABA problem .这个问题是关于 .NET 内存模型在 ABA 方面的行为。 在他对 Lock-Free LIFO Stack 的讨论中(2007 年 5 月 MSD
从 AIM 7 beta 2 到现在的 AIM 7 beta 6,GM - AIM 开始使用新的 .aba 文件格式来保存文件。这些文件过去位于我们可以访问的文件夹中程序文件,但是由于“性能提升”,A
我正在阅读 lock free boost 文档的一部分,它说“使用固定大小的数组来存储内部节点”以避免在 32 位机器上防止 ABA 问题。有人可以给我提示这部分在源代码中的位置吗?整个 boost
我有一种情况需要更新候选人的选票。 公民可以投票给这个候选人,每个候选人可以投一票以上。即一个人可以投 5 票,而另一个人可以投 2 票。在这种情况下,该候选人应获得 7 票。 现在,我使用 Djan
我正在基于此实现一个无锁队列 algorithm ,它使用计数器来解决 ABA 问题。但我不知道如何用 c++11 CAS 实现这个计数器。例如,从算法: E9: if CAS(&tail.pt
我正在尝试对字符串进行排序(为 punnetsquare 制作基因型)。我当前的实现是: unsorted_genotype = 'ABaB' sorted_genotype = sorted(lis
我需要运行一个服务程序,用 FO 为 abas-ERP continuous 编写。 我听说一些已经存在的脚本可以从 shell 调用服务程序。如果可能的话,我可以简单地使用一个 cronjob 来启
当使用比较和交换 (CAS) 技术编写无锁代码时,存在称为 ABA 问题的问题: http://en.wikipedia.org/wiki/ABA_problem 因此,仅比较值“A”是有问题的,因为
我想知道为什么下面的函数会出错: #include using namespace std; class Saba { public: Saba(){ cout (sabaPtr);
在一些论坛和书籍中(即 C++ Concurrency in Action)有一个很好的多生产者/多消费者堆栈的例子,并且在 pop 实现中他们通常这样做以下内容: // head is an std
是否有任何 FO 函数或 AJO 函数来获取在屏幕编辑器中声明的必填字段? 最佳答案 据我所知FO中没有这个功能。前段时间我自己需要这些信息,我从 xml 屏幕描述文件中获取了这些信息。 必填字段看起
我是一名优秀的程序员,十分优秀!