• pthread_create函数


    函数简介

      pthread_create是UNIX环境创建线程函数

    头文件

      #include<pthread.h>

    函数声明

    int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);

    返回值

      若成功则返回0,否则返回出错编号

    参数

      第一个参数为指向线程标识符的指针。

      第二个参数用来设置线程属性。

      第三个参数是线程运行函数的地址。

      最后一个参数是运行函数的参数。

    注意

      在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库。 

                                 pthread_join函数

    函数简介

      函数pthread_join用来等待一个线程的结束。

    函数原型为:

      extern int pthread_join __P (pthread_t __th, void **__thread_return);

    参数:

      第一个参数为被等待的线程标识符

      第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。

    注意

        这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。如果执行成功,将返回0,如果失败则返回一个错误号。

    例子:

    #include<stdio.h>
    #include<stdlib.h>
    #include<pthread.h>
    
    /* 声明结构体 */
    struct member
    {
        int num;
        char *name;
    };
    
    /* 定义线程pthread */
    static void * pthread(void *arg)
    {
        struct member *temp;
    
        /* 线程pthread开始运行 */
        printf("pthread start!
    ");
    
        /* 令主线程继续执行 */
        sleep(2);
    
        /* 打印传入参数 */
        temp = (struct member *)arg;
        printf("member->num:%d
    ",temp->num);
        printf("member->name:%s
    ",temp->name);
    
        return NULL;
    }
    
    /* main函数 */
    int main(int agrc,char* argv[])
    {
        pthread_t tidp;
        struct member *b;
    
        /* 为结构体变量b赋值 */
        b = (struct member *)malloc(sizeof(struct member));
        b->num=1;
        b->name="mlq";
    
        /* 创建线程pthread */
        if ((pthread_create(&tidp, NULL, pthread, (void*)b)) == -1)
        {
            printf("create error!
    ");
            return 1;
        }
    
        /* 令线程pthread先运行 */
        sleep(1);
    
        /* 线程pthread睡眠2s,此时main可以先执行 */
        printf("mian continue!
    ");
    
        /* 等待线程pthread释放 */
        if (pthread_join(tidp, NULL))
        {
            printf("thread is not exit...
    ");
            return -2;
        }
    
        return 0;
    }
    View Code

    编译与执行结果

        编译与执行结果如下图所示,可以看到主线程main和线程pthread交替执行。也就是说是当我们创建了线程pthread之后,两个线程都在执行,证明创建成功。另外,可以看到创建线程pthread时候,传入的参数被正确打印。

    Over。。。

    本文转自:https://www.cnblogs.com/amanlikethis/p/5537175.html

  • 相关阅读:
    VC窗口类的销毁-是否需要delete
    ScrollView在调试状态一点击就挂的原因(OnMouseActivate)
    TextOut与DrawText的区别
    NOIP2010 引水入城
    欧拉回路
    BZOJ 1202: [HNOI2005]狡猾的商人
    codevs 2491 玉蟾宫
    BZOJ 1059: [ZJOI2007]矩阵游戏
    BZOJ 1024: [SCOI2009]生日快乐
    ural 1297. Palindrome
  • 原文地址:https://www.cnblogs.com/gjmhome/p/14086927.html
Copyright © 2020-2023  润新知