-
8 votesanswersviews
std :: vector是否是线程安全的并且默认是并发的?为什么或者为什么不?
使动态数组线程安全且并发是什么意思?比方说, std::vector . 两个线程可能希望插入相同的位置 . 不需要同步,因为它将根据线程调度完成 . 一个线程擦除而另一个线程将访问同一个元素?这不是数据结构问题我认为,这是一个使用问题 . 那么有什么需要在 std::vector 上完成以使其成为线程安全和并发的,或者它是默认的线程安全和并发的吗? -
27 votesanswersviews
无锁和无等待的线程安全延迟初始化
要执行无锁和无等待的延迟初始化,请执行以下操作: private AtomicReference<Foo> instance = new AtomicReference<>(null); public Foo getInstance() { Foo foo = instance.get(); if (foo == null) { foo = ... -
0 votesanswersviews
将ASIO作为事件循环进行升级,使用boost lockfree队列进行套接字写入
我正在使用boost ASIO作为TCP客户端 . 在大多数情况下,ASIO是一个美观的事件循环,用于读写 . 实际上只有一个客户端由ASIO管理 . 体系结构是这样的 - TCP服务器流连续消息 . 客户端将读取消息,处理消息并使用正确的代码恢复 . 我的代码在客户端运行 . 有一个运行io_service的线程 . io_service线程使用boost lockfree SPSC队列读取... -
1 votesanswersviews
CPU寄存器和高速缓存一致性
当涉及到MESI等缓存一致性协议时,CPU寄存器和CPU缓存之间的关系是什么?如果某个值存储在CPU的缓存中,并且也存储在寄存器中,那么如果缓存行被标记为“脏”会发生什么?根据我的理解,即使缓存更新(由于MESI),寄存器也不会更新它的值 . 亨赫这段代码: static void Main() { bool complete = false; var t = new T... -
9 votesanswersviews
C 11是否保证发布栏和消费操作之间的内存排序?
请考虑以下代码: struct payload { std::atomic< int > value; }; std::atomic< payload* > pointer( nullptr ); void thread_a() { payload* p = new payload(); p->value.store( 10, std::m... -
3 votesanswersviews
是否存在保留插入顺序的无锁哈希表?
我正在尝试优化我使用基于锁的哈希表的库 . 一种方法是用无锁的结构代替这种基于锁的结构 . 我发现了一些算法,我决定使用这篇论文在C中实现:Split-ordered lists: lock-free extensible hash tables 问题是这种结构不能保留元素的插入顺序,我需要这个功能有两个原因: 1)将下一个元素获取到当前元素(根据插入顺序而不是以hashkey顺序), 2)当达到... -
2 votesanswersviews
InterlockedCompareExchange - 具体的对齐要求是什么以及如何实施?
我无法理解MSDN文档对Interlocked Variable Access系列函数的影响 . 我使用InterlockedExchange进行设置,使用InterlockedCompareExchange获取多个线程使用的成员变量 . 该成员位于1个字节的包装类中: #pragma pack(1) class MyClass { char _; long m_MyMember;... -
1 votesanswersviews
当无锁队列满/空时, 生产环境 者/消费者的退避策略?
假设 生产环境 者 - 消费者情景 . 我使用了固定容量队列的无锁实现,因此: 队列中可以保留的项目数量有限 . 生产环境 者/消费者可以直接向/从队列中推送/弹出项目而无需持有任何锁定 . 现在,我正在考虑如何同步 生产环境 者和消费者,以便 生产环境 者不忙于尝试推送到完整队列,并且消费者不忙于从空队列中尝试弹出 . 我首先考虑了条件变量 . 但它似乎破坏了使用无锁队列实现的整个目...