c – 我是否需要保护由一个线程写入并由多个线程读取的变量?

我正在写一个数据采集系统.该系统既可以处理来自信号数字化仪的快速数据,也可以缓慢控制/监控诸如探测器的高压系统.慢速控制系统每秒读取一次电压并将其写入数据结构.

在写入磁盘之前,每个事件都标记有其检测器的电压.为此,事件处理线程读取慢速控制/监视线程写入的结构.

鉴于在电压读取后X微秒发生的事件是否被标记为前一秒的电压读取并不重要:我是否需要使用互斥锁来保护结构中的数据结构或原子变量?

如果我理解正确,每隔一个线程正在读取电压,将其写入某些“数据结构”,其他线程正在不时地读取该数据结构(我是否正确?)

如果这个“数据结构”具有原子加载和存储(例如,x86上的int,char等),那么其他线程正在读取的值将永远不会改变(或者可能发生其他令人讨厌的事情,例如重新排序) ).您需要同步以确保从其内存存储而不是从缓存存储中正确读取/写入原子存储/加载.

如果这个“数据结构”不是原子的 – 那么我们正在处理未定义的行为,这总是错误的.

所以你需要通过原子或锁来使“数据结构”既原子又同步.

如果这个“数据结构”足够小,std :: atomic似乎适合这里.如果没有,看看你的系统是否支持读写器锁定,它们似乎非常适合这里.

https://stackoverflow.com/questions/36603950/do-i-need-to-guard-a-variable-that-is-written-by-one-thread-and-read-by-many

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 我是否需要保护由一个线程写入并由多个线程读取的变量?