对向量(vector :: operator []和vector :: size())的只读访问是否是异步安全的?

bwD*_*aco 4 c++ posix vector signal-handling async-safe

我的程序需要对vector<string>信号处理程序中的a 的内容执行只读访问SIGINT.(另一种方法是使用固定大小的固定长度C字符串数组.)该程序设计为在POSIX环境中运行.

是vector::operator[]和vector::size()异步安全(或信号安全)?

Rei*_*ica 5

不,这不安全.C++ 11 1.9/6:

当抽象机器的处理因接收到信号而中断时,对象的值都不是

  • 类型volatile std::sig_atomic_t也不
  • 无锁原子对象(29.4)

在执行信号处理程序期间未指定,并且处理程序修改的不属于这两个类别之一的任何对象的值变为未定义.

  • @DragonLord不确定结论 - 标准读数意味着更多:除非您的数组存储`volatile std :: sig_atomic_t`的对象,否则无论如何都无法使用它. (2认同)