diff options
| author | Bernard Xiong <[email protected]> | 2022-10-15 16:19:13 +0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2022-10-15 16:19:13 +0800 |
| commit | 34c77da153319da3225bd2064333b34942fee933 (patch) | |
| tree | 2866795c124980a36e3258e2f0d3bb6888a1b5a9 /include | |
| parent | 8524e273e10a87724b4f86dfe8ae94e7cef6ca70 (diff) | |
[Kernel] Add nested mutex feature
Diffstat (limited to 'include')
| -rw-r--r-- | include/rtdef.h | 12 | ||||
| -rw-r--r-- | include/rtthread.h | 1 |
2 files changed, 10 insertions, 3 deletions
diff --git a/include/rtdef.h b/include/rtdef.h index 89ac9edf6e..12232c2d5c 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -665,12 +665,19 @@ struct rt_thread /* priority */ rt_uint8_t current_priority; /**< current priority */ + rt_uint8_t init_priority; /**< initialized priority */ #if RT_THREAD_PRIORITY_MAX > 32 rt_uint8_t number; rt_uint8_t high_mask; #endif /* RT_THREAD_PRIORITY_MAX > 32 */ rt_uint32_t number_mask; +#ifdef RT_USING_MUTEX + /* object for IPC */ + rt_list_t taken_object_list; + rt_object_t pending_object; +#endif + #ifdef RT_USING_EVENT /* thread event */ rt_uint32_t event_set; @@ -764,12 +771,11 @@ struct rt_mutex { struct rt_ipc_object parent; /**< inherit from ipc_object */ - rt_uint16_t value; /**< value of mutex */ - - rt_uint8_t original_priority; /**< priority of last thread hold the mutex */ + rt_uint8_t priority; /**< the maximal priority for pending thread */ rt_uint8_t hold; /**< numbers of thread hold the mutex */ struct rt_thread *owner; /**< current owner of mutex */ + rt_list_t taken_list; /**< the object list taken by thread */ }; typedef struct rt_mutex *rt_mutex_t; #endif /* RT_USING_MUTEX */ diff --git a/include/rtthread.h b/include/rtthread.h index c55720b7d1..893b24ea1b 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -368,6 +368,7 @@ rt_err_t rt_mutex_detach(rt_mutex_t mutex); rt_mutex_t rt_mutex_create(const char *name, rt_uint8_t flag); rt_err_t rt_mutex_delete(rt_mutex_t mutex); #endif +void rt_mutex_drop_thread(rt_mutex_t mutex, rt_thread_t thread); rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t timeout); rt_err_t rt_mutex_trytake(rt_mutex_t mutex); |
