gpt4 book ai didi

multithreading - 互斥体所有权是否仅严格地移交给在解锁之前已请求锁定的线程?

转载 作者:行者123 更新时间:2023-12-03 12:55:01 26 4
gpt4 key购买 nike

情况:

  • 线程1当前拥有互斥量。
  • 虽然线程1保留了互斥锁的所有权,但线程2发出了对同一锁的请求。
  • 线程1解锁锁。

  • 在这个关头,另一个线程(例如,线程3)能否突然涌入并请求该锁并获取它(如下所示)?还是POSIX保证在解锁互斥锁时已经由已经等待该互斥锁的线程获取互斥锁?

    MUTEX_acquisition_race
    pthread_mutex_unlock()的手册页指出-

    If there are threads blocked on the mutex object referenced by mutex when pthread_mutex_unlock() is called, resulting in the mutex becoming available, the scheduling policy shall determine which thread shall acquire the mutex.



    这似乎表明线程3无法进入并获取互斥量,尽管我不能完全确定。

    最佳答案

    在解锁时,所有试图锁定互斥锁的线程都将从“已阻塞”更改为“就绪”。一种特定的实现可以确保只有那些线程中的一个会获取互斥体,但是在那时,任何线程都可以尝试锁定互斥体。

    因此,在某些实现中(甚至可能在所有实现中),线程3可能能够抢先获得互斥体。

    关于multithreading - 互斥体所有权是否仅严格地移交给在解锁之前已请求锁定的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207390/

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