- 主题:请问async signal safe 的函数里能否有条件的用vector?
要实现一个async signal safe 的函数,如果我的vector已经提前 reserve 好了空间,push_back 是不是保证不申请内存?这样是否是async signal safe的了? 还是说绝对不能用vector?
这块完全不懂,网上也没找到详细解释,感谢感谢~
--
FROM 117.136.0.*
申请内存咋了?new操作是thread-safe的。
你在别的线程中也同时操作这个vector?
--
FROM 221.222.173.*
malloc 不是 async signal safe的。不过可能仅限linux,其他系统不知道。
【 在 z16166 的大作中提到: 】
: 申请内存咋了?new操作是thread-safe的。
: 你在别的线程中也同时操作这个vector?
--
FROM 114.255.33.*
知道了。我把thread safe和async signal safe搞混了
IEEE Std 1003.1 lists 118 reentrant UNIX(R) functions. The rest of the functions are non-reentrant because of any of the following:
They call malloc or free
They are known to use static data structures
They are part of the standard I/O library
感觉应该尽量不要依赖push_back()、emplace_back()的内部实现来保证reentrant,这些STL函数没有保证说一定不会去调用malloc/new。
【 在 fairfox 的大作中提到: 】
: malloc 不是 async signal safe的。不过可能仅限linux,其他系统不知道。
--
修改:z16166 FROM 221.222.173.*
FROM 221.222.173.*
signal handler 的最佳实践是不是修改一下标志位,然后 send(pipefd) 马上返回?
【 在 z16166 (Netguy) 的大作中提到: 】
: 知道了。我把thread safe和async signal safe搞混了
: IEEE Std 1003.1 lists 118 reentrant UNIX(R) functions. The rest of the functions are non-reentrant because of any of the following:
: They call malloc or free
: ...................
--
FROM 183.253.22.*
应该是吧。sig handler、interrupt handler中都是尽可能少干活,把干活的代码移到外面来
【 在 hgoldfish 的大作中提到: 】
: signal handler 的最佳实践是不是修改一下标志位,然后 send(pipefd) 马上返回?
:
--
FROM 221.222.173.*
为啥不直接用signalfd或者sigwait
【 在 hgoldfish 的大作中提到: 】
: signal handler 的最佳实践是不是修改一下标志位,然后 send(pipefd) 马上返回?
:
: 【 在 z16166 (Netguy) 的大作中提到: 】
: ....................
--
FROM 106.121.143.*
不知道啊。signalfd 是不是 linux 专用?
【 在 kirbyzhou (下雪 你那边下雪了么?) 的大作中提到: 】
: 为啥不直接用signalfd或者sigwait
--
FROM 183.253.22.*