RT-Thread / RT-Thread/rt-thread
rt-thread优先级配置失效问题
Open
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 12.2k
- Forks
- 5.4k
- Avg merge
- 4d 12h
- Merged PRs (30d)
- 40
Description
/* get highest priority inside its taken object and its init priority */
rt_inline rt_uint8_t _thread_get_mutex_priority(struct rt_thread* thread)
{
rt_list_t *node = RT_NULL;
struct rt_mutex *mutex = RT_NULL;
rt_uint8_t priority = thread->init_priority;
rt_list_for_each(node, &(thread->taken_object_list))
{
mutex = rt_list_entry(node, struct rt_mutex, taken_list);
rt_uint8_t mutex_prio = mutex->priority;
/* prio at least be priority ceiling */
mutex_prio = mutex_prio < mutex->ceiling_priority ? mutex_prio : mutex->ceiling_priority;
if (priority > mutex_prio)
{
priority = mutex_prio;
}
}
return priority;
}
这里获取优先级会使用线程的初始优先级,假设对一个已经创建好的线程使用了设置优先级的线程API,那么之后在使用线程锁的时候,由于rtthread的防止优先级翻转的机制,会导致当前线程的优先级重新变成线程的初始优先级。
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at _thread_get_mutex_priority and inspect how thread->init_priority, runtime priority changes, and mutex priority inheritance interact. Reproduce the reported case by changing a created thread's priority before it takes a mutex, then verify that locking does not restore the initial priority and add or run the relevant kernel regression coverage if available.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c
- Domain
- operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100