由于同一进程中的线程共享相同的地址空间,我们可以通过直接内存访问和互斥锁在这些线程之间传输数据,然后在此上下文中我有以下问题:
>全局变量和互斥体是否足以进行线程间通信?
>如果问题1是假的,我们应该在什么情况下选择其他IPC而不是直接内存访问?或者说,在什么情况下,其他IPC意味着比使用全局变量和互斥量更合适?
谢谢.
UPDATE
感谢@ssyam指出关于“全局变量”的错误陈述.
除了更正原始段落之外,我选择再添加一个部分,因为
关于该段,已经提出了许多意见.
最佳答案 好吧,全局变量在单线程代码中很糟糕,而在多线程代码中,它们通常成为一个主要问题.即使使用互斥锁正确完成同步,它们也会成为瓶颈.此外,互斥体通常不足以进行线程间通信.您通常至少还需要条件变量.
也就是说,在多线程应用程序中,在内存中的线程之间传输数据是合理的.但是,一般来说,我发现处理显式锁定并不可行.即使消息是内存中的数据结构,在传输类似于消息传递系统的数据时,代码往往不那么复杂和高效.从这个意义上讲,消息在任何时候都只由一个线程使用,并且唯一的锁定发生在消息传递工具中是隐含的.