【问题标题】:Does message queue support Multi-thread?消息队列是否支持多线程?
【发布时间】:2012-03-25 16:18:14
【问题描述】:

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

  1. Linux 函数 msgget()、msgsnd() 和 msgrcv() 能否在一个进程中由多个线程调用?不同线程中的这些函数将尝试访问(r/w)一个进程的消息队列。所有的比赛条件都应该由系统处理吗?如果没有,有什么好的方法可以支持线程并向其主线程(进程)发送消息?

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

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

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

很多问题。 :) 谢谢。

【问题讨论】:

    标签: c linux


    【解决方案1】:

    Linux 函数 msgget()、msgsnd() 和 msgrcv() 可以在一个进程中被多个线程调用吗?

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

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

    是的,请阅读 documentation

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2011-03-13
      • 2017-06-10
      • 2011-07-29
      • 1970-01-01
      • 2012-12-08
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多