对从未读取的内存进行并发非原子写入是否安全?
注意:本问题并非其他问题的重复项。
并发非原子写入从未被读取的内存区域的安全性问题
假设某块内存区域从未被读取,那么何时对其进行并发非原子写入是安全的?这与语言无关,主要涉及CPU架构约束。
应用场景为在多线程应用中丢弃TCP套接字等不可寻址对象中的字节,但在无法使用BPF丢弃过滤器的情况下。
- 此类写入按字节粒度操作是否可行?目前我有非关键业务代码采用这种方式(通过并发调用
read系统调用将接收的数据全部转入黑洞),且至今未出现问题。 - 写入操作是否必须限制在各自的缓存行内?一个核心写入、另一个核心读取时可能会出现一致性问题,但我认为这只会影响(从未被读取的)内存区域?
- 写入操作是否必须限制在各自的(通常为4 KiB)内存页内?在某些情况下可能会出现TLB问题,若系统假设未同步指令意味着完全无需TLB同步,但这种情况确实极不可能(处理不同地址的并发请求通常也需要相同的同步机制)。
- 总体而言,这种操作是否从始至终都不安全?
内容的提问来源于stack exchange,提问作者Claudia
相关产品推荐
相关产品推荐

