C 什么是POSIX';s相当于Win32';什么是互斥?

C 什么是POSIX';s相当于Win32';什么是互斥?,c,pthreads,C,Pthreads,POSIX的互斥相当于Win32的关键部分——其范围仅限于单个进程。Win32的互斥锁(在NT land中实际上称为“变种”)用作跨进程锁定机制。pthreads对于跨进程锁的等价物是什么?您应该使用IPC进行跨进程操作:管道、信号量、消息队列或共享内存。 我想在你的情况下,命名信号灯就可以了。有关更多信息: man 7 sem_overview 它是一个pthread\u mutex\t,属性设置为pthread\u PROCESS\u SHARED。但是,您有责任在共享内存中放置这样一个互

POSIX的
互斥
相当于Win32的
关键部分
——其范围仅限于单个进程。Win32的互斥锁(在NT land中实际上称为“变种”)用作跨进程锁定机制。pthreads对于跨进程锁的等价物是什么?

您应该使用IPC进行跨进程操作:管道、信号量、消息队列或共享内存。 我想在你的情况下,命名信号灯就可以了。有关更多信息:

man 7 sem_overview

它是一个pthread\u mutex\t,属性设置为pthread\u PROCESS\u SHARED。但是,您有责任在共享内存中放置这样一个互斥对象,所有进程都可以访问它——因此它不像win32 api那么简单


可能更接近win32的是一个或sysv信号量。传统上,进程间的同步也使用文件锁完成,例如flock或(这并不像听起来那么慢)

我确实希望使用共享内存。但是仍然需要有一种方法在共享内存上执行锁。sem_init()可以用来在共享内存上执行锁。忘记这些无用的信号量吧。创建一个共享内存对象,然后在其中创建一个pshared互斥体。作用域不仅仅适用于线程吗?您只能将
pthread\u attr\u t
传递到
pthread\u create
。您需要将
pthread\u mutexttr\u t
pthread\u mutex\u init
一起使用。没错,这是pthread\u mutexttr的pshared。您需要的是关于锁的缓慢(或缺乏)的链接吗?我搜索了更多的细节,但没有发现任何有趣的东西。我们有一个共享文件很大的大项目,我怀疑我们会因为锁而出现一些性能问题,但我不知道如何找到答案;无论是否存在争用,都会产生系统调用开销。对于互斥,唯一的开销是cpu的内存同步惩罚,除非存在争用。对于很少使用的锁,使用
lockf
可能是可以接受的,但是对于任何面向性能的锁,请忘记它。谢谢你,R。它甚至比这更糟糕,因为文件映射到内存中,并通过内存操作进行修改。我不敢想象内核要做什么来检测文件锁定部分中的修改。
CRITICAL\u部分
更接近
pthread\u spinlock\u t
,互斥锁将是
WaitForSingleObject
/
ReleaseMutex
pthread\u mutex\u t
@Steve-o:这两者之间有什么区别?根据我的理解(尽管有限),关键部分和互斥体之间的唯一区别是一个在单个进程内,而另一个是跨进程的。那么posix自旋锁和posix互斥锁之间的区别是什么?@Billy:这个答案可能会有帮助,自旋锁忙着等待,互斥锁产生@Steve-o:关键部分产生。@Billy:您可以在多处理器系统上设置为not: