我觉得这个线程设计思路很酷,通过代理实现多个线程初始化和对应的管理。
所以我自己话一点时间,自己仿写一个类是的代码,只是把功能化简了。
thread.h
#include <pthread.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <assert.h> typedef void *(* ThreadFunc) (void *); extern void thread_addThreads(unsigned int uint_sum, ThreadFunc threadFunc, void * param);
thread.c
#include "thread.h" static char sourceID[] = "ZTH"; typedef struct { ThreadFunc threadFunc; void * param; }ThreadParam; static pthread_mutex_t pthread_mutex_printf; static void * ProxyThread(void * pthreadParam); static void CreateThread(void *arg); // void thread_init(void) // { // pthread_mutex_init(&pthread_mutex_printf,NULL); // } void thread_addThreads(unsigned int uint_sum, ThreadFunc threadFunc, void * param) { unsigned int item; for (item = 0; item != uint_sum;++item) { ThreadParam * threadParam = (ThreadParam *)calloc(1,sizeof(ThreadParam)); assert(threadParam != NULL); threadParam->threadFunc = threadFunc; threadParam->param = param; /* create pthread_t ,in the function we should free the * calloc buffer */ CreateThread(threadParam); } } void CreateThread(void *arg) { pthread_t tid; pthread_create(&tid,NULL,ProxyThread,arg); assert(tid != 0); } void * ProxyThread(void *arg) { ThreadParam * threadParam = (ThreadParam *)arg; ThreadFunc threadFunc = threadParam->threadFunc; void * param = threadParam->param; free(threadParam); threadFunc(param); return; }
main.c
#include "thread.h" void * fun(void * arg) { printf ("%s\n",(char*)arg); return NULL; } int main(int argc, char *argv[]) { thread_addThreads(2,fun,"hello world"); return 0; }
PS:
这个线程思路将线程的创建不是用程序员自己手动创建pthread_create ,通过将对应的函数和参数传递到一个库文件。由库文件实现对于线程的创建。
我觉得这样就可以巧妙的将线程复杂应用和对应创建线程函数分开。很不错的一个代码!