我正在编写多线程应用程序。该应用程序包含一个长度数组,比方说1000。
如果我现在有两个线程并且我确定,那个线程1只能访问元素0-499而线程2只能访问元素500-999,我是否需要一个锁定机制来保护阵列或者没关系。
注意:在计算过程中,只会更改数组的内容!数组不会被移动,memcpy
或以其他方式改变,而不是改变数组内部的元素。
答案 0 :(得分:2)
你想要的就是完美的!这些策略(与一堆低级原子基元融合在一起)是所谓的无锁编程的基础。
答案 1 :(得分:2)
实际上,实施此解决方案可能存在问题。你必须强烈保证你提到的属性。
确保您的内存数据阵列永远不会移动。您不能依赖大多数std
容器。其中大多数可能会在修改过程中发生重std::map
正在重新平衡内部树,并使一些内部指针无效。 std::vector
有时会在插入时重新分配整个容器。
确保您拥有的任何数据只有一个消费者和一个生产者。每个使用者必须将内部迭代器存储在有效状态,以防止两次读取相同的项目,或跳过某个项目。每个生产者必须将数据放在有效的位置,而不可能覆盖现有的,而不是读取的数据。
违反此规则的任何,您需要实现互斥锁。