static void mtx8_execute(void) { tprio_t prio = chThdGetPriority(); threads[0] = chThdCreateStatic(wa[0], WA_SIZE, prio+1, thread11, "A"); threads[1] = chThdCreateStatic(wa[1], WA_SIZE, prio+2, thread10, "C"); threads[2] = chThdCreateStatic(wa[2], WA_SIZE, prio+3, thread12, "B"); chCondSignal(&c1); chCondSignal(&c1); test_wait_threads(); test_assert_sequence(1, "ABC"); }
static void test_005_009_execute(void) { tprio_t prio; /* [5.9.1] Reading current base priority.*/ test_set_step(1); { prio = chThdGetPriorityX(); } /* [5.9.2] Thread A is created at priority P(+1), it locks M2, locks M1 and goes to wait on C1.*/ test_set_step(2); { threads[0] = chThdCreateStatic(wa[0], WA_SIZE, prio+1, thread8, "A"); } /* [5.9.3] Thread C is created at priority P(+2), it enqueues on M1 and boosts TA priority at P(+2).*/ test_set_step(3); { threads[1] = chThdCreateStatic(wa[1], WA_SIZE, prio+2, thread6, "C"); } /* [5.9.4] Thread B is created at priority P(+3), it enqueues on M2 and boosts TA priority at P(+3).*/ test_set_step(4); { threads[2] = chThdCreateStatic(wa[2], WA_SIZE, prio+3, thread9, "B"); } /* [5.9.5] Signaling C1: TA wakes up, unlocks M1 and priority goes to P(+2). TB locks M1, unlocks M1 and completes. TA unlocks M2 and priority goes to P(+1). TC waits on C1. TA completes.*/ test_set_step(5); { chCondSignal(&c1); } /* [5.9.6] Signaling C1: TC wakes up, unlocks M1 and completes.*/ test_set_step(6); { chCondSignal(&c1); } /* [5.9.7] Checking the order of operations.*/ test_set_step(7); { test_wait_threads(); test_assert_sequence("ABC", "invalid sequence"); } }
/* -*- thread -*- */ static THD_FUNCTION(th_log, arg ATTR_UNUSED) { /* TODO */ chCondSignal(&m_log_init_done); while (true) { /* TODO */ chThdSleepMilliseconds(1000); } return MSG_OK; }
void CondVar::signal(void) { chCondSignal(&condvar); }
/** * @brief Single condvar signal. * @details Signals a condvar to a single waiting thread. * @note This procedure may be called within a lock zone guarded by a mutex, * shared by the waiting and the signalling thread. * * @param[in,out] cvp * Pointer to an initialized @p UrosCondVar object. */ void uros_lld_condvar_signal(UrosCondVar *cvp) { urosAssert(cvp != NULL); chCondSignal(cvp); }