我认为锁、互斥锁、信号量用于同步多个(线程或进程?)同时访问某些内容。
这个“东西”必须是多个(线程或进程)之间的共享内存吗?
如果是,是否意味着锁、互斥量、信号量仅用于进程的多个线程,而不用于多个进程,因为多个进程不共享内存,而同一进程的多个线程则共享内存?
谢谢。
答案1
锁、互斥量和信号量是用于线程之间还是进程之间?
您将找到这两种情况的锁定原语的示例。例如,pthread 互斥体用于同一进程的线程之间的互斥。另一方面,System V IPC(man svipc
) 信号量可以跨进程使用。文件系统级锁(文件或文件的一部分)也可以用于在多个进程之间进行协调。
这个“东西”必须是多个(线程或进程)之间的共享内存吗?
不一定是共享内存。任何类型的资源都可以通过同步原语进行保护。一块共享内存(在进程和/或线程之间共享)可能是最常见的示例,但其他东西如文件句柄(锁定整个文件或文件的一部分,或其他类型的“句柄”到唯一资源) )并且还可以访问硬件设备。
如果是,是否意味着锁、互斥量、信号量仅用于进程的多个线程,而不用于多个进程,因为多个进程不共享内存,而同一进程的多个线程则共享内存?
好吧,不。进程可以共享内存。 (事实上,大多数都这样做,如果只是以只读方式 - 包含共享库代码的页面在进程之间共享。但这不需要保护。分叉时完成的写时复制共享映射确实需要保护,但内核会透明地处理该问题 - 这涉及共享内存映射上的锁,这在概念上与保护内存区域/数据结构的普通锁有点不同。)
进程或线程可以共享的任何其他内容(当至少其中一个可以写入时)都需要保护/协调,我认为文件和设备是最常见的两个。