提交 bb506e84 编写于 作者: B Bernard Xiong

[pthreads] Add spinlock declare and fix code issue.

上级 5d36fa78
...@@ -20,6 +20,7 @@ _pthread_data_t *pth_table[PTHREAD_NUM_MAX] = {NULL}; ...@@ -20,6 +20,7 @@ _pthread_data_t *pth_table[PTHREAD_NUM_MAX] = {NULL};
_pthread_data_t *_pthread_get_data(pthread_t thread) _pthread_data_t *_pthread_get_data(pthread_t thread)
{ {
RT_DECLARE_SPINLOCK(pth_lock);
_pthread_data_t *ptd; _pthread_data_t *ptd;
if (thread >= PTHREAD_NUM_MAX) return NULL; if (thread >= PTHREAD_NUM_MAX) return NULL;
...@@ -36,6 +37,7 @@ _pthread_data_t *_pthread_get_data(pthread_t thread) ...@@ -36,6 +37,7 @@ _pthread_data_t *_pthread_get_data(pthread_t thread)
pthread_t _pthread_data_get_pth(_pthread_data_t *ptd) pthread_t _pthread_data_get_pth(_pthread_data_t *ptd)
{ {
int index; int index;
RT_DECLARE_SPINLOCK(pth_lock);
rt_hw_spin_lock(&pth_lock); rt_hw_spin_lock(&pth_lock);
for (index = 0; index < PTHREAD_NUM_MAX; index ++) for (index = 0; index < PTHREAD_NUM_MAX; index ++)
...@@ -51,11 +53,12 @@ pthread_t _pthread_data_create(void) ...@@ -51,11 +53,12 @@ pthread_t _pthread_data_create(void)
{ {
int index; int index;
_pthread_data_t *ptd = NULL; _pthread_data_t *ptd = NULL;
RT_DECLARE_SPINLOCK(pth_lock);
ptd = (_pthread_data_t*)rt_malloc(sizeof(_pthread_data_t)); ptd = (_pthread_data_t*)rt_malloc(sizeof(_pthread_data_t));
if (!ptd) return PTHREAD_NUM_MAX; if (!ptd) return PTHREAD_NUM_MAX;
memset(ptd, 0x0, sizeof(sizeof(_pthread_data_t))); memset(ptd, 0x0, sizeof(_pthread_data_t));
ptd->canceled = 0; ptd->canceled = 0;
ptd->cancelstate = PTHREAD_CANCEL_DISABLE; ptd->cancelstate = PTHREAD_CANCEL_DISABLE;
ptd->canceltype = PTHREAD_CANCEL_DEFERRED; ptd->canceltype = PTHREAD_CANCEL_DEFERRED;
...@@ -67,6 +70,7 @@ pthread_t _pthread_data_create(void) ...@@ -67,6 +70,7 @@ pthread_t _pthread_data_create(void)
if (pth_table[index] == NULL) if (pth_table[index] == NULL)
{ {
pth_table[index] = ptd; pth_table[index] = ptd;
break;
} }
} }
rt_hw_spin_unlock(&pth_lock); rt_hw_spin_unlock(&pth_lock);
...@@ -76,6 +80,8 @@ pthread_t _pthread_data_create(void) ...@@ -76,6 +80,8 @@ pthread_t _pthread_data_create(void)
void _pthread_data_destroy(pthread_t pth) void _pthread_data_destroy(pthread_t pth)
{ {
RT_DECLARE_SPINLOCK(pth_lock);
_pthread_data_t *ptd = _pthread_get_data(pth); _pthread_data_t *ptd = _pthread_get_data(pth);
if (ptd) if (ptd)
{ {
......
...@@ -157,6 +157,7 @@ extern rt_hw_spinlock_t _rt_critical_lock; ...@@ -157,6 +157,7 @@ extern rt_hw_spinlock_t _rt_critical_lock;
(rt_hw_spinlock_t) __RT_HW_SPIN_LOCK_INITIALIZER(lockname) (rt_hw_spinlock_t) __RT_HW_SPIN_LOCK_INITIALIZER(lockname)
#define RT_DEFINE_SPINLOCK(x) rt_hw_spinlock_t x = __RT_HW_SPIN_LOCK_UNLOCKED(x) #define RT_DEFINE_SPINLOCK(x) rt_hw_spinlock_t x = __RT_HW_SPIN_LOCK_UNLOCKED(x)
#define RT_DECLARE_SPINLOCK(x)
/** /**
* ipi function * ipi function
...@@ -172,6 +173,13 @@ void rt_hw_secondary_cpu_up(void); ...@@ -172,6 +173,13 @@ void rt_hw_secondary_cpu_up(void);
* secondary cpu idle function * secondary cpu idle function
*/ */
void rt_hw_secondary_cpu_idle_exec(void); void rt_hw_secondary_cpu_idle_exec(void);
#else
#define RT_DEFINE_SPINLOCK(x)
#define RT_DECLARE_SPINLOCK(x) rt_ubase_t x
#define rt_hw_spin_lock(lock) *(lock) = rt_hw_interrupt_disable()
#define rt_hw_spin_unlock(lock) rt_hw_interrupt_enable(*(lock))
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册