Linux下的posix消息队列能不能在进程内不用时删除掉
最近在搞移植,将windows下代码的移植到Linux下时,对每个线程都使用mq_open创建一个消息队列与其相应,供线程使用,由于程序中要不断的结束旧的线程和开启新的线程,这样创建的消息队列最终将系统指定的消息队列内存耗光了,这可怎么办?我查看资料说使用mq_unlink掉的消息队列只有当进程结束掉才会删除消息队列,这样才会释放消息队列所占有的内存,我现在就一个进程,这个进程不能关掉,但是我想删掉不用的消息队列,使其释放内存,这可怎么办呀?
[解决办法]
先mq_close 再mq_unlink试试
从系统中删除名为name的消息队列。但删除的只是我们可以在系统中看见的文件的名字,但文件本身并没有被从磁盘上删除,除非该名称是文件的最后一个链接,并且该文件已关闭,才会将该文件真正从磁盘上删除。即如果某前该详细队列的文件还在其他进程中打开,那么不会将其从磁盘上删除,又或者这是最后一个链接,但它还为关闭,即未执行ma_close操作,或打开它的进程为结束就执行mq_unlink,它也不会从磁盘上删除。