我觉得这个线程设计思路很酷,通过代理实现多个线程初始化和对应的管理。

所以我自己话一点时间,自己仿写一个类是的代码,只是把功能化简了。

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 ,通过将对应的函数和参数传递到一个库文件。由库文件实现对于线程的创建。

我觉得这样就可以巧妙的将线程复杂应用和对应创建线程函数分开。很不错的一个代码!

posted on 2013-04-27 09:16  zengco2009  阅读(123)  评论(0编辑  收藏  举报