多线程的简单实现(无锁).
typedef void* (*Funcptr)();
typedef struct
{
pthread_t* threadid;
int max;
Funcptr callback;
}pthreadpool;
void* callback1()
{
printf("%s\n",__func__);
printf("create!!!\n");
}
void* multicallback(void* callback2)
{
printf("%s\n",__func__);
Funcptr func = (Funcptr)callback2;
func();
}
int init(pthreadpool **pool)
{
printf("%s\n",__func__);
*pool = (pthreadpool *)malloc(sizeof(pthreadpool));
(*pool)->max = 10;
(*pool)->threadid = (pthread_t*)malloc(sizeof(pthread_t) * (*pool)->max);
(*pool)->callback = callback1;
return 0;
}
int getPthread(pthreadpool *pool)
{
printf("%s\n",__func__);
if(NULL == pool) return -1;
int i = 0;
for(i;i < pool->max;++i)
{
int ret = pthread_create(&(pool->threadid[i]),NULL,multicallback,(void*)pool->callback);
if(!ret) printf("create threadid[%lu] success!\n",pool->threadid[i]);
}
return 0;
}
int destoryPthread(pthreadpool *pool)
{
if(NULL == pool) return 0;
int i = 0;
for(;i < pool->max; ++i)
{
pthread_join(pool->threadid[i],NULL);
printf("destory threadid[%lu] success!\n",pool->threadid[i]);
}
free(pool->threadid);
pool->threadid = NULL;
printf("free pool->threadid success!\n");
free(pool);
pool = NULL;
printf("free pool success!\n");
return 0;
}
int testPthread()
{
printf("%s\n",__func__);
pthreadpool *pool = NULL;
init(&pool);
getPthread(pool);
destoryPthread(pool);
pool = NULL;
return 0;
}
int main(int argc,char *argv[])
{
printf("%s\n",__func__);
testPthread();
return 0;
}