0

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

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

4

1 回答 1

1

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

那么,如果在不同 CPU 上运行的两个线程 pthread_mutex_lock()同时在同一个互斥体上调用一个锁(例如 ),那么这个例程的执行会顺序执行而不是并行执行吗?

它没有指定底层是如何pthread_mutex_lock()工作的,但从应用程序的角度来看,如果它没有返回错误,则说明你的线程已经获得了锁。

在第一个锁结束并且调用它的线程对临界区具有私有访问权限后,另一个 CPU 上的另一个线程执行的锁是否会导致后面的线程挂起?

是的 - 规范pthread_mutex_lock()说:

如果互斥锁已被另一个线程锁定,则调用线程应阻塞,直到互斥锁可用。

于 2016-10-30T23:28:30.353 回答