linux c 執行緒池 互斥變數 條件變數

2021-06-16 17:17:14 字數 2284 閱讀 7184

// 執行緒池主要實現模組multithreadtest.c

#include

#include

#include

#include

#include

#include

typedef struct threadworker

;typedef struct threadpool

;static struct threadpool *pool=null;

static void *threadrun(void *arg);

void poolinit(int maxthreadnum)

}int pooladdtask(void *(*taskrun)(void *arg),void *arg)

member->next=newtask;

}else

if(pool->queuehead!=null)

pthread_mutex_unlock(&(pool->mutex));

pthread_cond_signal(&(pool->cond));

//pthread_rwlock_unlock(&(pool->rwlock));

return 0;

}static void *threadrun(void *arg)

//pthread_rwlock_rdlock(&(pool->rwlock));

shutdown=pool->shutdown;

if(pool->curqueuesize!=0&&pool->queuehead!=null)

pthread_mutex_unlock(&(pool->mutex));

//pthread_rwlock_unlock(&(pool->rwlock));

if(curworker==null&&shutdown!=0)//任務鍊錶為空且收到銷毀線池命令時終止執行緒

if(curworker!=null)

}pthread_exit(0);

}int pooldestroy()

//pthread_rwlock_wrlock(&(pool->rwlock));

pthread_mutex_lock(&(pool->mutex));

pool->shutdown=1;

pthread_mutex_unlock(&(pool->mutex));

//pthread_rwlock_unlock(&(pool->rwlock));

pthread_cond_broadcast(&(pool->cond));

int i;

for(i=0;imaxthreadnum;i++)

free(pool->threadid);

struct threadworker *deleteheader=null;

while(pool->queuehead!=null)

pthread_mutex_destroy(&(pool->mutex));

pthread_cond_destroy(&(pool->cond));

// pthread_rwlock_destroy(&(pool->rwlock));

free(pool);

return 0;

}//對外標頭檔案multithreadtest.h///

#include

#include

#include

#include

#include

#include

void poolinit(int maxthreadnum);

int pooladdtask(void *(*taskrun)(void *arg),void *arg);

int pooldestroy();

//測試檔案test.c/

#include

#include

#include "multithreadtest.h"

void *myfunc(void *arg);

int main(void)

pooldestroy();

free(num);

exit(0);

}void *myfunc(void *arg)

/編譯說明///

正式編譯 gcc -o test multithreadtest.* test.c -lrt -lpthread

gdb除錯編譯  gcc -g  multithreadtest.* test.c -o test -lrt -lpthread

Linux C 多執行緒程式設計互斥鎖與條件變數

linux c 多執行緒程式設計互斥鎖與條件變數 include mylib.h define buffer size 5 產品庫存大小 define product cnt 30 產品生產總數 struct product cons buffer void init struct product ...

Linux C 多執行緒程式設計條件變數

二 條件變數 這裡主要說說 pthread cond wait 的用法,在下面有說明。條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 一 個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 為了防止競爭,條件變數的使用總是和乙個互斥鎖結合...

執行緒同步 互斥鎖 條件變數

在 執行緒同步 互斥鎖 一文中,我們分析了只用互斥鎖同步執行緒的弊端 cpu的效率和時效性不可兼得。下面,我們通過使用條件變數,在保證cpu效率的前提下,提高程式的時效性。只用互斥鎖同步執行緒,其cpu佔用率之所以高,是因為執行緒需要輪詢,即需要不停的檢查條件是否滿足。我們使用條件變數,當條件不滿足...