atomicXor
atomicXor
在共享内存(通常是 Storage Buffer)中的一个整数上执行线程安全的“按位异或”(Bitwise XOR)操作,主要用于在并行计算中安全地、可逆地翻转一个或多个状态位。
核心优势
提供了硬件层面保证的、线程安全的状态位翻转方法。其可逆性(A ^ B ^ B = A)使得可以用同一个操作实现“开启”和“关闭”两种相反的效果,极大地简化了某些算法逻辑。
常见用途
实现“行军蚁”动态选择框,通过重复异或操作来绘制和擦除。
进行奇偶性检测,如判断射线穿越一个物体的次数是奇数还是偶数。
作为可擦写的临时标记,在多阶段算法中用同一掩码设置和移除标记。
如何调整
其效果由 `valueNode`(位掩码)参数控制,它决定了要“翻转”哪些位。在灯光面板的例子中,`valueNode` 决定了点击事件会影响哪个灯。改变掩码,比如从 `1u << 5` 改为 `1u << 10`,就会让点击操作去翻转第10个灯而非第5个。使用 `0b11` 的掩码则会同时翻转两个灯。
代码示例
1// 创建一个掩码,只翻转指定的灯对应的位
2const switch_mask = 1u << bit_index;
3// 对灯光面板的状态执行原子异或操作,实现“切换”效果
4atomicXor(light_panel_buffer.element(index), switch_mask);