首页 > TAG信息列表 > lock-free
java AtomicReference如何在后台运行
java AtomicReference如何在后台运行?我尝试查看代码,但是基于sun.misc.Unsafe,所以可能另一个问题是Unsafe如何工作?解决方法:这特定于当前的实现,可以更改,但不一定是文档 How java AtomicReference works under the hood 有两个操作.单次读/写或原子交换. >单个读/写是简单的易爪哇 – 为什么自动垃圾收集消除ABA问题?
我在Wikipedia的实践书中研究了并发中的ABA问题,并在阅读post之后 据我了解ABA问题的根本原因,我们在算法中检查状态与以前相同,但是算法暗示状态未受影响. 具有堆栈数据结构的示例: 要添加元素到堆栈,我们使用以下算法: create new stack node(save to `newNode` variable) while(c – 如何将std :: string放入boost :: lockfree :: queue(或替代)?
我正在尝试将std :: strings放入boost :: lockfree :: queues,以便我的线程可以使用新数据互相更新. 当我尝试使用boost :: lockfree :: queue< std :: string> updated_data;,g说: In instantiation of ‘class boost::lockfree::queue >’: error: static assertion failed: (boc – 无锁双链表的原子操作
我正在根据这些论文编写一个无锁双链表: “基于引用计数的高效可靠的无锁内存回收” Anders Gidenstam,IEEE会员,Marina Papatriantafilou,H?akan Sundell和Philippas Tsigas “无锁的deques和双链表”HåkanSundell,Philippas Tsigas 对于这个问题,我们可以放下第一篇论文. 在本文中是否可以在C中实现无锁地图
我们正在开发一个基于C / S的网络应用程序,我们发现有太多的锁添加到std :: map,服务器的性能变差了. 我想知道是否可以实现无锁地图,如果有,怎么样?那里有开源代码吗? 编辑: 实际上我们使用std :: map来存储套接字信息,我们根据套接字文件描述进行了封装,以包含一些其他必要的信息,如C中是否有生产就绪的无锁队列或哈希实现
我一直在搜索C中的无锁队列.我发现了一些代码和一些试验 – 但我没有能够编译.也欢迎无锁哈希. 摘要: 到目前为止,我没有正面答案.没有“生产就绪”库,令人惊讶的是现有的库都没有符合STL容器的API.解决方法:从1.53开始,boost提供了set of lock free data structures,包括队列,堆栈c – 共享内存IPC同步(无锁)
请考虑以下情形: 要求: > Intel x64 Server(多个CPU插槽=> NUMA) > Ubuntu 12,GCC 4.6>两个进程在(命名)共享内存上共享大量数据>古典生产者 – 消费者情景>内存安排在循环缓冲区(带M个元素) 程序序列(伪代码): 流程A(生产者): int bufferPos = 0; while( true ) { if( isBufferEmc – 无锁进度保证
有趣的是,我发现很多程序员错误地认为“无锁”只意味着“没有互斥的并发编程”.通常,还存在一个相关的误解,即编写无锁代码的目的是为了获得更好的并发性能.当然,无锁的正确定义实际上是关于进度保证.无锁算法保证至少一个线程能够前进,无论其他线程正在做什么. 这意味着无锁算法永C Treiber堆栈和原子下一个指针
“Treiber Stack”通常是最简单的无锁数据结构之一,因此在教授无锁算法的介绍时经常使用它. 我见过许多使用C原子的Treiber Stacks实现.算法本身是微不足道的,因此真正的挑战是处理无锁数据结构的所有其他附带细节,例如提供执行安全内存回收的某种方式,避免ABA问题,以及以无锁方式c – exchange或compare_and_exchange是否按修改顺序读取最后一个值?
我正在读安东尼威廉姆斯C++ Concurrency in Action. 在“理解轻松订购”部分,它有: There are a few additional things you can tell the man in the cubicle, such as “write down this number, and tell me what was at the bottom of the list” (exchange) and “write down在C 11中是否有任何编译器屏障等于asm(“”:::“memory”)?
我的测试代码如下,我发现只有memory_order_seq_cst禁止编译器重新排序. #include <atomic> using namespace std; int A, B = 1; void func(void) { A = B + 1; atomic_thread_fence(memory_order_seq_cst); B = 0; } 而诸如memory_order_release,memory_order_acc – /boost/lockfree/queue.hpp:错误:静态断言失败:(boost :: has_trivial_destructor :: value)
我试图在此文件https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp中替换boost :: lockfree :: queue for std :: queue 我添加了#include< boost / lockfree / queue.hpp> ;;更改了第130行,std :: queue< action> m_actc – 为什么我的无锁消息队列是segfault :(?
作为一个纯粹的心理练习,我试图让它在没有锁或互斥体的情况下工作.这个想法是当消费者线程正在读取/执行消息时,它以原子方式交换生产者线程用于写入的std :: vector.这可能吗?我试过玩线程围栏无济于事.这里有竞争条件,因为它偶尔会出现故障.我想它在enqueue函数中的某个地方.有任围绕Win32的无锁SList有一个不错的C包装吗?
Windows提供了一个无锁的单链表,如本页所述: Win32 SList 我想知道这个功能是否存在一个好的C包装器.当我说好的时候,我的意思是它尽可能地导出通常的STL接口,支持迭代器等.我宁愿使用别人的实现而不是坐下来编写STL类型的容器.解决方法:你可以使用boost和:: boost :: iterator_facac – 我是否需要使用内存屏障来保护共享资源?
在多生产者,多消费者的情况下.如果生产者写入int a,并且消费者正在读取int a,我是否需要围绕int a的内存屏障? 我们都了解到:共享资源应该始终受到保护,标准不能保证正确的行为. 然而,在高速缓存一致的体系结构上,可以自动确保可见性,并且保证8,16,32和64位变量的原子性MOV操作. 因此c – 奇怪的shared_ptr行为
我在c中发现了一个非常奇怪的std :: shared_ptr行为. 以下示例与标准指针完美配合. 但是,使用std :: shared_ptr会导致分段错误. (见下面的回溯) 我知道,从多个线程访问std :: shared_ptr是不安全的,因此我正在使用原子操作.即使是经典的锁也无法解决问题. 我使用gcc版本6.3.0 2017c# – 无锁,等待,独占访问方法
我有一个线程安全类,它使用需要独占访问的特定资源.在我的评估中,让各种方法的调用者在Monitor.Enter上阻塞或等待SemaphoreSlim以访问该资源是没有意义的. 例如,我有一些“昂贵的”异步初始化.由于多次初始化没有意义,无论是来自多个线程还是单个线程,多个调用应立即返回(甚至抛出java – 为什么CAS不被认为等同于忙等待循环?
在过去几天读了一些关于无锁编程的内容,我来到util.java.Random类,使用以下例程创建它的位: protected int next(int bits) { long oldseed, nextseed; AtomicLong seed = this.seed; do { oldseed = seed.get(); nextseed = (oldseed * multiplier +