multithreading - 在Linux/UNIX上的多处理情况下是否可以使用互斥锁?

标签 multithreading synchronization mutex multiprocessing semaphore

这是一个面试问题。

在Linux/UNIX上的多处理情况下是否可以使用互斥锁?

我的想法:
不,不同的进程具有单独的内存空间。

互斥锁仅用于多线程。

信号量用于多处理以进行同步。

正确的 ?

欢迎任何意见。

谢谢

最佳答案

互斥锁(mutex)防止多个线程
从同时执行代码的关键部分
访问共享数据(即互斥锁用于序列化)
线程的执行)。所有互斥锁必须是全局的。一种
通过mutex_lock()成功调用互斥锁
会导致另一个试图锁定该线程的线程
阻塞相同的互斥锁,直到所有者线程通过以下方式将其解锁
的mutex_unlock()。同一进程中的线程或
在其他进程中可以共享互斥体。

互斥对象可以同步同一进程内的线程或
中,其他进程在中。互斥体可用于同步
进程之间的线程(如果互斥锁分配在其中)
可写内存,并在合作进程之间共享
(请参阅mmap(2)),并且已针对此任务进行了初始化。

初始化

互斥体可以是进程内的,也可以是进程间的,具体取决于
在将参数隐式或显式传递给
该互斥量的初始化。静态分配的互斥锁
不需要显式初始化;默认情况下,
静态分配的互斥锁将全零初始化
并将其范围设置为在调用过程中。

为了实现进程间同步,互斥体必须是
处理这些进程之间共享的内存。自从
此类互斥锁的内存必须动态分配,
互斥锁需要使用Mutex_init()进行显式初始化。

关于multithreading - 在Linux/UNIX上的多处理情况下是否可以使用互斥锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9389730/

相关文章:

multithreading - C++11共享指针线程安全被破坏?

c++ - 设置线程数量以作为消费者工作

multithreading - 如何将对堆栈变量的引用传递给线程?

multithreading - 在线程之间同步/发送数据

Go RWMutex 仍然会引发竞争条件吗?

c++ - 只使用互斥锁实现读/写锁?

java - 如何在 Java 中访问可运行对象中的变量

ios - Firebase 离线 iOS : How to keep in sync reliably?

c - 3by3线程同步: how to avoid overhead

c - 在信号处理程序中读取共享数据