消息队列支持多线程吗?

Joe*_*e.Z 5 c linux

我有 3 个关于线程和进程通信的问题。

  1. Linux 函数 msgget()、msgsnd() 和 msgrcv() 能否被一个进程中的多个线程调用?不同线程中的这些函数将尝试访问(读/写)一个进程的消息队列。系统是否应该考虑所有竞争条件?如果没有,是否有任何好的方法来支持线程并向其主线程(进程)发送消息?

  2. semop()函数可以用来同步一个进程中的线程吗?

  3. 有一个共享内存,有以下实体可供访问。

    • 过程
    • 一个进程中的多个线程。我是否必须同时使用进程间级别的信号量和线程级别的信号量?有什么简单的方法可以处理这个问题吗?

很多问题。:) 谢谢。

Alo*_*ave 4

Linux 函数 msgget()、msgsnd() 和 msgrcv() 能否被一个进程中的多个线程调用?

您无需担心竞争条件,系统会处理这一问题,这些调用不存在竞争条件。

semop()函数可以用来同步一个进程中的线程吗?

是的,请阅读文档中的更多内容

我是否必须使用进程间级别的信号量和线程级别的信号量?

在线程或进程之间全局共享的任何资源都会受到竞争条件的影响,因为一个或多个线程或进程试图同时访问它,因此您需要同步对此类共享全局资源的访问。