标签: wait-free

无锁和无等待的线程安全延迟初始化

要执行无锁和无等待的延迟初始化,请执行以下操作:

private AtomicReference<Foo> instance = new AtomicReference<>(null);  

public Foo getInstance() {
   Foo foo = instance.get();
   if (foo == null) {
       foo = new Foo();                       // create and initialize actual instance
       if (instance.compareAndSet(null, foo)) // CAS succeeded
           return foo;
       else                                   // CAS failed: other thread set an object 
           return instance.get();             
   } else {
       return foo;
   }
}
Run Code Online (Sandbox Code Playgroud)

除了一件事之外,它的效果非常好:如果两个线程看到实例null,它们都会创建一个新对象,只有一个幸运的是通过CAS操作设置它,这会浪费资源.

有没有人建议另一种无延迟初始化模式,这会降低两个并发线程创建两个昂贵对象的可能性?

java multithreading lock-free lazy-initialization wait-free

27
推荐指数
1
解决办法
2871
查看次数

std::atomic 中的任何内容都是免等待的?

如果T是 C++ 基本类型,并且如果std::atomic<T>::is_lock_free()返回true,那么是否有任何东西std::atomic<T>是无等待的(不仅仅是无锁的)?像, load, store, fetch_add, fetch_sub, compare_exchange_weak, 和compare_exchange_strong

您是否还可以根据 C++ 标准中指定的内容以及 Clang 和/或 GCC(您选择的版本)中实现的内容进行回答。

我最喜欢的无锁和无等待定义来自C++ Concurrency in Action(免费提供)。如果满足下面的第一个条件,则算法是无锁的,如果满足以下两个条件,则是无等待的:

  1. 如果访问数据结构的线程之一在其操作中途被调度程序挂起,则其他线程必须仍然能够完成其操作而无需等待挂起的线程。
  2. 无论其他线程的行为如何,访问数据结构的每个线程都可以在有限步数内完成其操作。

c++ lock-free language-lawyer stdatomic wait-free

7
推荐指数
1
解决办法
658
查看次数

使用SharedMemory MMF实现快速.NET无锁进程

我是新手multitasking,IPC并且我正在尝试使用共享内存构建一种快速进程间通信的方法(起初我正在研究IPC术语,考虑到wcf sockets并且named pipes最终只发现MMF).

现在我已经通过使用LockEventWaitHandle信令在两个进程之间使用共享内存成功实现了一个小测试,我采用了一种实现非阻塞/无等待模式的方法.现在,我正在尝试结合Thread.MemoryBarrier()并阅读signalling Sector来自MemoryMapedFile.

问题是身份不明!第一轮通过,第二轮最后一个位于百慕大三角...超出了调试器的范围......

过程中发送请求的突发的showMsg()处理b.

                                         //offset positions in mmf
MemoryMappedViewAccessor MmfAcc; const int opReady= 0, opCompleteRead = 4, .....



ReadTrd()
{
  //[0,3] - Reader is stationed
  //[4,7] - Read Complete successfully
  //[8,11] - Data-size 
  //[12,15] - Reader-exiting
  "format" the signals Section (write zeroes). 

   for(;;){if (WrTrd-StepMMF1  Confimed) break;}
  MmfAcc- read DataSize val @offset[8]
  MmfAcc- read …
Run Code Online (Sandbox Code Playgroud)

c# performance multithreading ipc wait-free

6
推荐指数
1
解决办法
933
查看次数