atomic

    0热度

    1回答

    我一直在do-while循环中使用atomicCAS来在我的第一个并行程序中需要时执行各种算术运算。我发现有其他操作,例如atomicInc,这与atomicCAS在do-while中的增量是一样的,是正确的?这会更有效率(在时钟周期方面),还是没有任何意义从我过度使用atomicCAS?

    3热度

    1回答

    我试图得到一个周期中的calculateValue的最大值,我希望它是线程安全的。所以我决定使用AtomicInteger和Math.max,但是我找不到一个解决方案,以便可以将操作视为原子操作。 AtomicInteger value = new AtomicInteger(0); // Having some cycle here... { Integer anotherCal

    0热度

    1回答

    我有一个类,其中我的add方法被多个线程调用以填充clientidToTimestampHolder LinkedBlockingQueue。然后在下面的类中,我有一个后台线程,每30毫秒运行一次并调用processData()方法,将clientidToTimestampHolder排除到Map列表,然后通过调用适当的方法迭代该List以将数据发送到不同的服务。 我可以用不同的时间戳获得相同的u

    1热度

    1回答

    我理解C++ 11中内存排序的基本规则,特别是release-acquire排序。我在两个线程之间共享了一大块内存,我不需要原子性,但是要确保线程完成的所有更改最终都可以在另一个线程中看到,尤其是在具有宽松内存模型的平台上。 可以简单地使用原子防护变量var来触发内存同步吗?例如, std::atomic<bool> guardVar; char *shared_mem=get_shared_m

    -2热度

    1回答

    我有一个要求,其中一个int数组假设要在20个线程中共享。线程可以对数组值执行递增/递减。 最初我使用mutex锁定/解锁阵列进行同步共享。它的工作,但它不是安全的。因此计划切换到std::atomic。 是否有使用,我可以创造这样 std::array<std::atomic<int>, 10> array; OR 其中“INT-原子值的阵列”可制作任何其他方式的方法吗?

    2热度

    3回答

    我的代码包含一些AtomicBoolean字段。只调用这些字段的get()和set()方法。 这些字段的类型可以安全地由原始布尔值替换吗? 我的意思是,原始布尔值的赋值和访问操作是Java中的原子操作。从这个角度来看,我看不出有什么理由在我的情况下使用AtomicBoolean。 根据我的理解,AtomicBoolean只有在使用像compareAndSet这样的方法时才有意义,它将比较和访问相结

    0热度

    2回答

    我有一个并行运行几个线程的Clojure代码。它们都共享一个原子:(def counter (atom 0)),它由每个线程递增。每10分钟后,我想执行使用原子值几个动作,然后重置回0 - 例如: (defn publish-val [] (let [c @counter] (email c) (statsd c) (print-log c) (r

    0热度

    1回答

    我使用bin/post来索引/ documents(已安装的卷)中的所有文件。它的工作原理和全文搜索工作正常。 我在发布所有文档之前添加到模式中的特定元数据的原子更新,它也可以工作。 我做了全文搜索以找回元数据已经更新的文档,它不再工作,更新在那里,但似乎全文索引已经消失。 我做了一个完整的重新索引,然后它覆盖了我为文档添加的元数据,并将其重置为默认值。虽然我添加的元数据字段既存储也编制索引。 不

    4热度

    1回答

    我在一个32位的Cortex-M3 ARM控制器(STM32L1)上有一个64位的整型变量,它可以被一个中断处理程序异步修改。 volatile uint64_t v; void some_interrupt_handler() { v = v + something; } 显然,我需要一种方式来访问它,以防止获得不一致的中途更新值。 这是第一次尝试 static inline

    0热度

    1回答

    我正在学习C++原子和多线程的基础知识。 根据状态(运行/休眠),我必须运行一个函数(并将状态更新为运行状态)或者什么也不做。 atomic_compare_exchange_strong和atomic_exchange是否有区别,如下面的代码片段所示?任何一种方法的副作用或陷阱? std::atomic<State> state{State::sleeping}; for (int i =