atomicStore
atomicStore
在共享内存(通常是 Storage Buffer)上执行线程安全的、不可中断的覆盖式写入操作,确保写入的值是完整的,不会被其他并行线程的写入所破坏或“撕裂”。
核心优势
从硬件层面保证写入操作的完整性(原子性),杜绝“撕裂写入”风险,并提供内存同步,确保一个线程的写入结果能被其他线程正确观察到,是发布最终计算结果的基础。
常见用途
在生产者-消费者模式中,由生产者线程发布最终计算结果。
在计算着色器中程序化生成纹理时,安全地写入每个像素的最终颜色。
并行化地重置或初始化大型缓冲区(如将其所有元素清零)。
如何调整
atomicStore 是一个忠实的执行者,其效果完全取决于提供的 `valueNode`(要写入的值)。例如,在生成程序化纹理时,如果将颜色计算逻辑从棋盘格改为圆形,它就会写入圆形数据,最终可视化的图像也会从棋盘格变为圆形。它的行为不变,但写入的内容决定了最终结果。
代码示例
1// 计算棋盘格颜色并打包
2uint c = (thread_id.x / 8u + thread_id.y / 8u) % 2u;
3uint finalColor = (c == 0u) ? 0xFF000000u : 0xFFFFFFFFu;
4// 原子性地将最终颜色写入缓冲区
5atomicStore(myTextureBuffer.element(index), finalColor);