fix thread pool bug

pull/6556/head
hangq 4 years ago
parent 76fb407717
commit 134a51f923

@ -64,6 +64,7 @@ typedef struct Thread {
atomic_bool activate;
atomic_bool is_running;
sem_t sem;
sem_t sem_inited;
} Thread;
typedef struct {
@ -119,7 +120,6 @@ void FreeThread(ThreadList *thread_list, Thread *thread) {
// only support sequential release
thread_list->head = thread->next;
sem_post(&thread->sem);
pthread_join(thread->pthread, NULL);
while (true) {
if (thread != NULL && !thread->is_running) {
sem_destroy(&thread->sem);
@ -525,6 +525,7 @@ void ThreadRun(Thread *thread) {
Task *task = NULL;
int thread_id = thread->thread_id;
int spin_count = 0;
sem_post(&thread->sem_inited);
while (thread_pool->is_alive) {
while (thread->activate) {
if (PopTaskFromQueue(thread, &task)) {
@ -589,8 +590,10 @@ int CreateNewThread(struct ThreadPool *thread_pool, int thread_id) {
thread->is_running = ATOMIC_VAR_INIT(true);
thread->next = NULL;
sem_init(&thread->sem, 0, 0);
sem_init(&thread->sem_inited, 0, 0);
PushThreadToList(thread_pool, thread);
pthread_create(&thread->pthread, NULL, (void *)ThreadRun, thread);
sem_wait(&thread->sem_inited);
pthread_detach(thread->pthread);
return RET_TP_OK;
}

Loading…
Cancel
Save