当前位置: 技术问答>linux和unix
使用SYSTEM V队列,有关消息资源释放的问题
来源: 互联网 发布时间:2016-02-07
本文导语: 使用SYSTEM V消息队列中,为避免资源释放,是否每个消息的构造需要全局的吗?资源是否会自动释放? 例如 : V_SendMsg() { MSG_T stSndMsg; /* 需要准备发送的消息 */ 初始化stSndMsg; 发送stSndMsg; ...
使用SYSTEM V消息队列中,为避免资源释放,是否每个消息的构造需要全局的吗?资源是否会自动释放?
例如 :
V_SendMsg()
{
MSG_T stSndMsg; /* 需要准备发送的消息 */
初始化stSndMsg;
发送stSndMsg;
msgsnd(...stSndMsg....);
}
V_RcvMsg()
{
MSG_T *pstRcvMsg; /* 准备要接收消息的指针 */
msgrcv(...pstRcvMsg.....);
}
问题:
V_SendMsg()将消息发送到队列中,是否将要发送的消息的一份拷贝发送至队列中呢?还是就将那一段内存直接发送至队列中?
V_RcvMsg()接收消息后,是否会自动释放资源?还是由我们自己主动释放呢?
例如 :
V_SendMsg()
{
MSG_T stSndMsg; /* 需要准备发送的消息 */
初始化stSndMsg;
发送stSndMsg;
msgsnd(...stSndMsg....);
}
V_RcvMsg()
{
MSG_T *pstRcvMsg; /* 准备要接收消息的指针 */
msgrcv(...pstRcvMsg.....);
}
问题:
V_SendMsg()将消息发送到队列中,是否将要发送的消息的一份拷贝发送至队列中呢?还是就将那一段内存直接发送至队列中?
V_RcvMsg()接收消息后,是否会自动释放资源?还是由我们自己主动释放呢?
|
V_SendMsg()将消息发送到队列中,是否将要发送的消息的一份拷贝发送至队列中呢?还是就将那一段内存直接发送至队列中?
===
拷贝
V_RcvMsg()接收消息后,是否会自动释放资源?还是由我们自己主动释放呢?
===
自己申请的内存当然要自己释放,如果消息长度不是太大,建议用结构代替指针
V_RcvMsg()
{
MSG_T stRcvMsg; /* 准备要接收消息的结构 */
msgrcv(...stRcvMsg.....);
}
这样可以减少指针出错的概率。
当然,如果消息还需要尽一步的处理,指针是较好的选择,但是要坚持谁申请,谁释放的原则。
===
拷贝
V_RcvMsg()接收消息后,是否会自动释放资源?还是由我们自己主动释放呢?
===
自己申请的内存当然要自己释放,如果消息长度不是太大,建议用结构代替指针
V_RcvMsg()
{
MSG_T stRcvMsg; /* 准备要接收消息的结构 */
msgrcv(...stRcvMsg.....);
}
这样可以减少指针出错的概率。
当然,如果消息还需要尽一步的处理,指针是较好的选择,但是要坚持谁申请,谁释放的原则。
|
队列中资源的由系统处理, 队列外的动态资源你自己处理.