// 執行緒池主要實現模組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佔用率之所以高,是因為執行緒需要輪詢,即需要不停的檢查條件是否滿足。我們使用條件變數,當條件不滿足...