mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-09 03:51:08 +08:00
improve semaphore
This commit is contained in:
parent
9c941b1c25
commit
e47f152f32
@ -49,7 +49,11 @@ tk_semaphore_t* tk_semaphore_create(uint32_t value, const char* name) {
|
|||||||
semaphore = NULL;
|
semaphore = NULL;
|
||||||
}
|
}
|
||||||
#elif defined(WIN32)
|
#elif defined(WIN32)
|
||||||
semaphore->sem = CreateSemaphore(NULL, MAX_RUNNUM, MAX_RUNNUM, name);
|
semaphore->sem = CreateSemaphore(NULL, value, INT_MAX, name);
|
||||||
|
if (semaphore->sem == NULL) {
|
||||||
|
TKMEM_FREE(semaphore);
|
||||||
|
semaphore = NULL;
|
||||||
|
}
|
||||||
#endif /*HAS_PTHREAD*/
|
#endif /*HAS_PTHREAD*/
|
||||||
|
|
||||||
return semaphore;
|
return semaphore;
|
||||||
@ -86,7 +90,7 @@ ret_t tk_semaphore_post(tk_semaphore_t* semaphore) {
|
|||||||
#ifdef HAS_PTHREAD
|
#ifdef HAS_PTHREAD
|
||||||
return_value_if_fail(sem_post(semaphore->sem) == 0, RET_FAIL);
|
return_value_if_fail(sem_post(semaphore->sem) == 0, RET_FAIL);
|
||||||
#elif defined(WIN32)
|
#elif defined(WIN32)
|
||||||
ReleaseSemaphore(semaphore->sem, 1, NULL);
|
return_value_if_fail(ReleaseSemaphore(semaphore->sem, 1, NULL), RET_FAIL);
|
||||||
#endif /*HAS_PTHREAD*/
|
#endif /*HAS_PTHREAD*/
|
||||||
|
|
||||||
return RET_OK;
|
return RET_OK;
|
||||||
|
@ -13,7 +13,7 @@ static void* thread_entry(void* args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(Semaphore, basic) {
|
TEST(Semaphore, basic) {
|
||||||
tk_semaphore_t* sem = tk_semaphore_create(1, "hello");
|
tk_semaphore_t* sem = tk_semaphore_create(0, "hello");
|
||||||
tk_thread_t* thread = tk_thread_create(thread_entry, sem);
|
tk_thread_t* thread = tk_thread_create(thread_entry, sem);
|
||||||
|
|
||||||
tk_thread_start(thread);
|
tk_thread_start(thread);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user