Linux多线程编程(C语言版)

//单线程版本:

#include
#include
#include
#include
#include
void print_currentTime(void)
{
        time_t ct;//long类型

        ct = time(NULL);
        //ctime:将秒数转换成字符串
        printf("current time is : '%s'",ctime(&ct));
        pthread_exit("Time thread finished!\n");//线程终止
        //void pthread_exit(void *rval_ptr);
        //rval_ptr是函数的返回代码,相当于线程的退出码
        //终止线程--pthread_cancel函数和pthread_exit函数
        //终止某个线程而不终止整个进程,可以有3种方法
        //1.从线程函数return。这种方法对主线程不适应,从main函数return相当于调用exit
        //2.一个线程可以调用pthread_cancel终止同一进程中的另一个线程
        //3.线程可以调用pthread_exit终止自己
    
        //int pthread_cancel(pthread_t thread);
        //thread参数是目标线程的标识符
        //函数成功返回0,失败返回错误码
        //void pthread_exit(void * retval);
        //retval是void*类型,其他线程可以调用pthread_join获得这个指针.需要注意,pthread_exit
        //或者return返回的指针所指向的内存单元必须是全局的或者是由malloc分 配的,不能在线程函
        //数的栈上分配,因为当其它线程得到这个返回指针时线程函数已经退出了。
        //pthread_exit
}

int main()
{
        int ret;
        void *thread_result;
        pthread_t new_thread;//pthread_t:long:8字节
    
        ret=pthread_create(&new_thread,NULL,(void*)print_currentTime,NULL);
        //thread        指向线程标识符的指针,使用这个标识符来引用新线程
        //attr          设置线程属性,设置为NULL则生成默认属性的线程
        //start_routine 线程运行函数的起始位置
        //arg           线程运行函数的参数
        if(ret != 0)
        {   
                perror("thread creation failed!\n");
                exit(EXIT_FAILURE);
        }   
    
        printf("waiting for new thread....\n");
        ret = pthread_join(new_thread,&thread_result);//阻塞进程,thread_restlt:存储被等待线程的返回值
        if(ret != 0)
        {   
                perror("thread join failed!\n");
                exit(EXIT_FAILURE);
        }
        printf("thread joined, returned: %s\n",(char*)thread_result);
        return 0;
}

//多线程版

 

 

 

 


 

你可能感兴趣的:(Linux多线程编程(C语言版))