jjzjj

lockless

全部标签

c++ - 原子线程计数器

我正在尝试使用C++11原子原语来实现各种原子“线程计数器”。基本上,我有一个代码的关键部分。在这个代码块中,任何线程都可以自由地从内存中读取。然而,有时,我想做一个重置或清除操作,将所有共享内存重置为默认的初始化值。这似乎是一个使用读写锁的好机会。C++11不包括开箱即用的读写互斥锁,但也许可以做一些更简单的事情。我认为这个问题将是一个很好的机会来更加熟悉C++11原子原语。所以我想了一会儿这个问题,在我看来我所要做的就是:每当线程进入临界区时,递增一个原子计数器变量每当线程离开临界区时,递减原子计数器变量如果一个线程希望重置所有变量为默认值,它必须原子地等待计数器为0,然后自动将其

c++ - 高速缓存行大小倍数的变量的高速缓存行填充

我正在创建一个非常快速的多线程离散事件模拟框架。该框架的核心使用原子和无锁编程技术来实现跨多个线程的非常快速的执行。这需要我将一些变量与缓存行对齐并填充剩余的缓存行空间,这样我就不会发生缓存行争用。这是我的做法://computecachelinepaddingsizeconstexpru64CLPAD(u64_objSize){return((_objSize/CACHELINE_SIZE)*CACHELINE_SIZE)+(((_objSize%CACHELINE_SIZE)>0)*CACHELINE_SIZE)-_objSize;}alignas(CACHELINE_SIZE)M

c++ - 如何在C++中使用无锁循环缓冲区实现零拷贝tcp

我有多个线程需要使用TCP流中的数据。我希望在共享内存中使用循环缓冲区/队列来读取TCP套接字。TCP接收将直接写入循环队列。消费者将从队列中读取。此设计应启用零复制和零锁定。但是这里有两个不同的问题。从TCP套接字中只读取1条逻辑消息是否可能/有效?如果没有,并且我阅读了超过1条消息,我将不得不将残差从这条复制到这条->下一条。真的可以实现无锁队列吗?我知道有原子操作,但这些也可能很昂贵。因为所有的CPU缓存都需要失效。这将影响我所有24个核心上的所有操作。我对低级TCP有点生疏,不太清楚如何判断消息何时完成。我是在寻找\0还是特定于实现?类型 最佳答案