读书人

使用SYSTEM V队列有关消息资源释放的

发布时间: 2012-04-10 21:03:56 作者: rapoo

使用SYSTEM V队列,有关消息资源释放的问题
使用SYSTEM V消息队列中,为避免资源释放,是否每个消息的构造需要全局的吗?资源是否会自动释放?

例如 :
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.....);

}
这样可以减少指针出错的概率。
当然,如果消息还需要尽一步的处理,指针是较好的选择,但是要坚持谁申请,谁释放的原则。

[解决办法]
队列中资源的由系统处理, 队列外的动态资源你自己处理.

读书人网 >UNIXLINUX

热点推荐