gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:04:18 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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() 在底层如何工作,但从应用程序的角度来看,您知道如果它不返回错误,则您的线程已获取锁。

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.

关于c - pthread API 是否在多处理器环境中提供同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40331913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com