Feedback
Feedback

If you are having issues with the exercises, please create a ticket on DevZone: devzone.nordicsemi.com
Drag & Drop Files, Choose Files to Upload 您最多可以上传 2 个文件。
  • 简体中文
    Eng
    简体中文
  • 互斥量

    与信号量不同,互斥量只能取两个值,通常称为已锁定或已解锁。此外,互斥量具有所有权属性,即只有锁定互斥量的线程才能将其解锁。您可以将其想象为一种带有单把钥匙的锁定/解锁机制,当线程希望访问单个对象(例如代码段或资源)时,需要先获取一个已解锁的互斥量并将其锁定,然后再访问该对象。如果尝试获取互斥量的线程发现该互斥量已被锁定,则该线程将被阻塞,并一直等待,直到锁定该互斥量的线程将其解锁为止。

    互斥量的典型用途是保护可从多个线程访问的代码临界区。临界区是一段需要完成且不被其他线程中断的代码,否则该临界区内的全局/静态数据可能会被错误呈现或损坏。

    互斥量具有以下属性:

    • 锁定互斥量将增加锁定计数。递归锁定(重入锁定)不会使锁定线程阻塞,因为它已经拥有该互斥量。线程应确保其解锁互斥量的次数与锁定次数相同,以释放互斥量,以便其他线程可以尝试拥有它。
    • 解锁互斥量将减少锁定计数。当锁定计数为零时,表示互斥量处于解锁状态。只有当互斥量处于解锁状态时,线程才能尝试拥有该互斥量。
    • 只有锁定互斥量的线程才能将其解锁。
    • 互斥量的锁定和解锁只能在线程中进行,而不能在 ISR 中进行。这是因为 ISR 无法参与调度器的所有权和优先级继承机制。
    • 锁定互斥量的线程符合优先级继承的条件,因为只有该线程才能解锁互斥量。

    下图显示了互斥量的属性

    互斥量

    Switch language?

    Progress is tracked separately for each language. Switching will continue from your progress in that language or start fresh if you haven't begun.

    Your current progress is saved, and you can switch back anytime.

    Register an account
    Already have an account? Log in
    (All fields are required unless specified optional)

    • 8 or more characters
    • Upper and lower case letters
    • At least one number or special character

    Forgot your password?
    Enter the email associated with your account, and we will send you a link to reset your password.