C语言 pthread_create() 函数讲解

 更新时间:2021年08月12日 10:17:28   作者:Ruigel1  
这篇文章主要介绍了C语言 pthread_create() 函数讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

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)\n", 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\n", strerror(err));
}

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

return EXIT_SUCCESS;
}

结果展示:

到此这篇关于C语言 pthread_create() 函数讲解的文章就介绍到这了,更多相关C语言 pthread_create()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++虚函数及虚函数表简析

    C++虚函数及虚函数表简析

    这篇文章主要介绍了C++虚函数及虚函数表,内容非常详细,思路清晰,需要的朋友可以参考下
    2015-08-08
  • 浅析c/c++中函数的参数传递

    浅析c/c++中函数的参数传递

    c/c++中,函数可以传递的参数有三种形式,值、引用和指针。以下分别对这三种形式进行了介绍,需要的朋友可以过来参考下
    2013-07-07
  • QT实现制作一个ListView列表的示例代码

    QT实现制作一个ListView列表的示例代码

    这篇文章主要为大家详细介绍了如何使用Qt制作一个ListView,点击ListView的Item可以用于测试OpenCV的各种效果,感兴趣的小伙伴可以了解一下
    2023-02-02
  • C++利用libcurl库实现多线程文件下载

    C++利用libcurl库实现多线程文件下载

    这篇文章主要为大家详细介绍了C++如何利用libcurl库实现多线程文件下载,文章的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2024-01-01
  • 手把手教你实现一个C++单链表

    手把手教你实现一个C++单链表

    链表是一种数据结构,用于数据的存储。这篇文章主要为大家介绍了如何实现一个C++单链表,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-11-11
  • C语言实现反弹球游戏

    C语言实现反弹球游戏

    这篇文章主要为大家详细介绍了C语言实现反弹球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Qt编写地图综合应用之绘制雨量分布

    Qt编写地图综合应用之绘制雨量分布

    雨量分布图是在区域地图基础上,针对区域中的每个最小单位区域比如县城点位不同颜色显示。本文将详细为大家介绍如何通过QT编写绘制雨量分布,感兴趣的小伙伴可以了解一下
    2021-12-12
  • C++编程中队内联函数的理解和使用

    C++编程中队内联函数的理解和使用

    这篇文章主要介绍了C++编程中队内联函数的理解和使用,简单举例讲解了inline关键字引出的内联函数的相关知识,需要的朋友可以参考下
    2016-01-01
  • c++仿函数和函数适配器的使用详解

    c++仿函数和函数适配器的使用详解

    这篇文章主要介绍了c++仿函数和函数适配器的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C/C++模拟实现烟花效果的示例代码

    C/C++模拟实现烟花效果的示例代码

    这篇文章主要为大家详细介绍了C/C++模拟实现烟花效果的两种简单方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
    2024-01-01

最新评论