pthread API 是否在多处理器环境中提供同步?

Does the pthread API provide synchronization in a multiprocessor environment?

我刚开始研究 pthread API。我一直在使用不同的书籍和网站,从它们所报告的内容来看,pthread 同步函数(例如那些涉及互斥锁的函数)都适用于单处理器和多处理器环境。但是 none 这些消息来源明确说明了这一点,所以我想知道是否确实如此(当然我相信是这样,我只是想 100% 确定)。

所以,如果两个线程 运行 在不同的 CPU 上同时调用同一个互斥体上的锁(例如 pthread_mutex_lock()),那么这个例程的执行是顺序执行而不是并行执行?在第一个锁结束并且调用它的线程拥有对临界区的私有访问权限后,另一个线程在另一个 CPU 上执行的锁是否会导致后一个线程挂起?

是的,确实如此。 POSIX API 根据实现要求进行描述 - 例如,return 为零或 EOWNERDEADpthread_mutex_lock() 必须 return由调用线程锁定和拥有的互斥体。多处理器环境也不例外,因此多处理器环境中的一致性实现必须继续使其工作。

So, if two threads running on different CPUs called a lock (e.g. pthread_mutex_lock()) on the same mutex at the same time, would the execution of this routine be executed sequentially rather than in parallel?

未指定 pthread_mutex_lock() 下面是如何工作的,但从应用程序的角度来看,您知道如果它没有 return 错误,则您的线程已获得锁。

And after the first lock is over and the thread invoking it has private access to the critical section, does the lock executed by the other thread on another CPU cause the latter thread to suspend?

是 - pthread_mutex_lock() 的规范说:

If the mutex is already locked by another thread, the calling thread shall block until the mutex becomes available.