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
    简体中文
  • 信号量

    从最简单的形式来看,信号量仅仅是一个被更改的普通变量,用于指示公共资源的状态。信号量可以被视为一种资源共享机制,当您拥有有限的资源实例并希望管理多个线程的访问时,可以使用该机制。它们更多地是一种信号传递机制,用于控制对给定数量资源实例的访问。

    信号量具有以下属性:

    • 在初始化时,您需要设置初始计数(大于或等于 0)和最大限制。
    • “释放 (Give)”将增加信号量计数,除非计数已达到最大限制,在这种情况下信号将不会增加。“释放 (Give)”可以从任何线程或中断服务例程 (ISR) 中执行。
    • “获取 (Take)”将减少信号量计数,除非信号量不可用(计数为零)。任何试图获取不可用信号量的线程都需要等待,直到其他线程使其可用(通过释放信号量)。“获取 (Take)”只能在线程中执行,不能在 ISR 中执行(内核确实允许 ISR 获取信号量,但如果信号量不可用,ISR 绝不能尝试等待)。
    • 信号量没有所有权。这意味着信号量可以由一个线程获取,并由任何线程释放。获取信号量的线程不一定必须是释放信号量的线程。
    • 获取信号量的线程不具备优先级继承的资格,因为获取线程并不拥有该信号量,且任何其他线程都可以释放该信号量。

    下图显示了信号量的属性

    信号量

    注意

    您可以初始化一个“满”信号量(计数等于限制值),以限制能够同时执行临界区的线程数量。

    您也可以初始化一个“空信号量”(计数等于 0,限制值等于 1),以创建一个门禁,在信号量首先增加之前,任何等待的线程都不得通过。

    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.