• pthread_create() 函数详解


    pthread_create是类Unix操作系统(Unix、Linux、Mac OS X等)的创建线程的函数。它的功能是创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。

    头文件:

    #include<pthread.h>

    函数原型

     
    int pthread_create (pthread_t * tidp,     const pthread_attr_t * attr,    void * (*start_rtn)(void*),      void *arg);
     
    各个参数说明
    第一个参数为指向线程标识符的指针
    第二个参数用来设置线程属性
    第三个参数是线程运行函数的起始地址
    最后一个参数是运行函数的参数
     
    编译链接参数:
    -lpthread
     
     
    返回值:
        若线程创建成功,则返回0。若线程创建失败,则返回出错编号,并且*thread中的内容是未定义的。
        返回成功时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于指定各种不同的线程属性。新创建的线程从start_rtn函数的地址开始运行,该函数只有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg的参数传入。
        linux下用C语言开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread。
     
    注意事项:
        因为pthread并非Linux系统的默认库,而是POSIX线程库。在Linux中将其作为一个库来使用,因此加上 -lpthread(或-pthread)以显式链接该库。函数在执行错误时的错误信息将作为返回值返回,并不修改系统全局变量errno,当然也无法使用perror()打印错误信息。
     
     
    示例代码:
    输出线程标识符:

    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include <unistd.h>
    #include <string.h>


    void printids(const char *s)
    {
    pid_t pid;
    pthread_t tid;
    pid = getpid();
    tid = pthread_self();
    printf("%s pid %u tid %u (0x%x) ", s, (unsigned int) pid, (unsigned int) tid, (unsigned int) tid);

    }

    void * thr_fn(void *arg)
    {
    printids("new thread: ");
    return NULL;
    }

    int main()
    {
    int err;
    pthread_t ntid;
    err = pthread_create(&ntid, NULL, thr_fn, NULL);
    if(err != 0)
    {
    printf("Can't create thread: %s ", strerror(err));
    }

    printids("main thread");
    pthread_join(ntid, NULL);

    return EXIT_SUCCESS;
    }

     
    结果展示:
     
     
     
  • 相关阅读:
    谷歌浏览器禁止缩放和全面屏显示
    常用正则表达式
    封装时间函数
    年月日,时分秒,星期
    昨天,明天,月初,月末,最近七天,最近一个月,今天零时js
    React框架
    javaweb基础备忘
    一些java基础知识的备忘
    查看deepin版本
    java中堆栈的一些理解备忘
  • 原文地址:https://www.cnblogs.com/ruigelwang/p/13163304.html
Copyright © 2020-2023  润新知