多线程实现相关函数

来源:互联网 发布:cocos2dx游戏源码下载 编辑:程序博客网 时间:2024/05/16 18:16
1 线程的创建
pthread_create 函数用于创建线程


表头文件:#include<pthread.h>
定义函数:int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void*(*start_rtn)(void),void*restrict arg)
函数说明:pthread_t *restrict tidp  要创建线程的线程ID指针 (&tid)
         const pthread_attr_t *restrict attr  创建线程时的线程属性(NULL)
         void*(*start_rtn)(void)  返回值是void类型的指针函数   (server_request)
         void*restrict arg  start_rtn的形参  ((void *)clientfd)
返回值: 调用成功后返回0,其他都表示错误,检测到如下情况,pthread_create()将失败并返回相应值
         EAGAIN 超出系统限制,线程创建太多
         EPERM  调用者没有适当权限设置所需的参数或调度策略
         EINVAL 描述 tattr 的值无效




2 线程终止
pthread_exit用于线程终止
定义函数: void pthread_exit(void *retval);
函数说明:使用 pthread_exit退出线程,这是线程的主动行为;由于进程中的多个线程是共享数据段,因此通常在线程退出后,退出线程所占用的资源
         并不会随着线程终止而释放,但可以用pthread_join函数来同步并释放
返回值:pthread_exit()调用线程返回值,可由其他函数如pthread_join来检索获取


退出方式有三种: 线程执行函数返回,返回值是线程的退出吗
                线程被同一进程的其他线程取消
                调用pthread_exit()函数退出


3 线程等待


pthread_join用于线程等待


定义函数:pthread_join(thread_t tid,void **status)
函数说明:参数tid 指要等待的线程ID,线程等待必须在当前进程中,不能在分离进程中,当status部位NULL时,status指向某个位置,在成功返回时,
         该位置设为终止线程的退出状态
返回值:成功返回0;不成功返回相应的值
        ESRCH  没有找到给定线程ID相应的线程

        EDEADLK  出现死锁

        EINVAL  给定线程ID对应线程为分离线程


/*  创建两个线程,实现每隔一秒实现一次打印 */#include<stdio.h>#include<pthread.h>void *mythread1(void){int i;for (i=0; i<100; i++){printf("this is first pthread\n");sleep(1);}}void  *mypthread2 (void){int i;for (i=0; i<100; i++){printf("this is secend pthread\n");sleep(1);}}int main(){int i = 0, ret = 0; pthread_t tid1,tid2;/*创建线程1*/ret = pthread_create(&tid1, NULL, (void*)mypthread1, NULL)if (ret){printf("create pthread error!\n");return 1;}/*创建线程2*/ret = pthread_create(&tid1, NULL, (void*)mypthread2, NULL)if (ret){printf("create pthread error!\n");return 1;}pthread_join(tid1,NULL);pthread_join(tid2,NULl);return 0;}


       
       













原创粉丝点击