日期:2014-05-16  浏览次数:20659 次

Systerm V 消息队列在多线程中的应用问题 满意即给分
情景:
一个进程中有多个线程(posix线程),每个线程都一个读同一个消息队列的操作,且读操作设置为阻塞式的

问题:
1,多个线程同时读一条消息的时候,进程是能保证同一条消息只能被一个线程读取吗(我试过貌似行)
2,消息队列对进程来说是互斥访问的,对同一个进程里的线程是怎么实现的
3,消息队列的互斥是在哪里实现的,读写的时候加锁吗

------解决方案--------------------
之前有人发帖问过,他给出的结论就是不加锁并发读是安全的。

消息队列这个东西都是随内核持续的,无论是POSIX还是SYSTEM V,所以这个并发安全性是内核实现的,没法关心。

man一下看看有没有提到。
------解决方案--------------------
消息队列的同步互斥由内核搞定
随便读写,不用担心
------解决方案--------------------
1,多个线程同时读一条消息的时候,进程是能保证同一条消息只能被一个线程读取吗(我试过貌似行)
>> 的确如此,消息队列提供的函数是独占式操作。
2,消息队列对进程来说是互斥访问的,对同一个进程里的线程是怎么实现的
>>线程是进程的一种特殊形式。对进程安全的东西,对线程也没问题。
3,消息队列的互斥是在哪里实现的,读写的时候加锁吗
>>读写都有同步控制,具体参考linux kernel src