函数简介
  pthread_create是UNIX环境创建线程函数

头文件
  #include<pthread.h>

函数声明
  int pthread_create(pthread_t *restrict tidp,const pthread_attr_t restrict_attr,voidstart_rtn)(void),void *restrict arg);

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

参数

第一个参数为指向线程标识符的指针。
  第二个参数用来设置线程属性。
  第三个参数是线程运行函数的地址。
  最后一个参数是运行函数的参数。

编译:

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

在Linux环境使GCC支持C99标准,使用如下命令编译(test_pthread2为c文件名字):
gcc test_pthread2.c -o test_pthread2 -std=c99 -pthread

pthread_join函数

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

函数原型:
extern int pthread_join __P (pthread_t __th, void **__thread_return);

参数说明:
第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,
当函数返回时,被等待线程的资源被收回。如果执行成功,将返回0,如果失败则返回一个错误号。

下面通过一个demo来说明这两个接口函数的用法:

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include <unistd.h>struct pthread_variable
{int number;char *name;
}; void *create_pthread(void *arg)//有void* 型参数传入,不能直接void, void*表示任何类型的参数
{struct pthread_variable *temp;temp=(struct pthread_variable *)arg;//通过指针赋地址给结构体变量赋值 printf("pthread_variable->number: %d\n", temp->number);printf("pthread_variable->name: %s\n", temp->name);sleep(1);return (void *)3; //返回一个指向void的数据类型的值
}int main(int argc, char **argv)
{pthread_t pthread_test;//定义线程标识符struct pthread_variable *var;void* pthread_return;var =(struct pthread_variable *)malloc(sizeof(struct pthread_variable));// 分配内存空间 var->number = 99; //结构体成员赋值var->name = "czd";              if((pthread_create(&pthread_test, NULL, create_pthread, (void*)var)) == -1) //pthread_create创建线程{printf("create pthread error!\n");return 1;}if(pthread_join(pthread_test, &pthread_return)) //调用pthread_join函数,等待线程结束再继续往下执行{printf("thread is not exit...\n");return -2;}printf("thread is exit , is %d\n",(int)pthread_return); //打印线程结束的返回值pthread_returnreturn 0;}

编译执行
在linux环境下执行编译(test_pthread2.c为c文件名,编译生成bin文件:test_pthread2 ):
gcc test_pthread2.c -o test_pthread2 -std=c99 -pthread

运行该bin文件:

zwei@ubt144c:/work/zwei/czd/others/pthread$ ./test_pthread2
pthread_variable->number: 99
pthread_variable->name: czd
thread is exit , is 3
zwei@ubt144c:/work/zwei/czd/others/pthread$

linux创建线程pthread_create函数相关推荐

  1. linux编程之pthread_create函数

    linux编程之pthread_create函数UNIX环境创建线程函数, 具体格式: #include<pthread.h> int pthread_create(pthread_t * ...

  2. linux 创建线程函数吗,[笔记]linux下和windows下的 创建线程函数

    linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include #define CreateThreadEx(tid,threadFun,args) ...

  3. 简单了解线程pthread_create函数

    在Linux下实现服务器线程的操作 并发 通俗的并发通常是指同时能并行的处理多个任务. 同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替的换入或者换出内存,这些线程是同时" ...

  4. Linux pthread_self和pthread_create函数

    pthread_self和pthread_create函数 头文件 #include <pthread.h> 函数原型 pthread_t pthread_self(void); int ...

  5. Linux创建线程时 内存分配的那些事

    文章目录 问题描述 问题分析 针对问题1 的猜测: 针对问题2 的猜测: 原理追踪 总结 问题描述 事情开始于一段内存问题,通过gperf工具抓取进程运行过程中的内存占用情况. 分析结果时发现一个有趣 ...

  6. 【Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数 | 非 JNI 方法获取 JNIEnv 与 Java 对象 | 线程获取 JNIEnv | 全局变量设置 )

    文章目录 I . JNI 线程创建 II . 线程执行函数 III . 线程方法获取 Java 对象 IV . 线程方法获取 JNIEnv V . JNI 线程 完整代码示例 I . JNI 线程创建 ...

  7. 创建线程的函数CreateThread

    主线程的进入点函数的名字必须是main.main.WinMain或wWinMain,其它线程必须用不同的名字 主线程的进入点函数传递了字符串参数,因此可以使用 ANSI/Unicode版本的进入点函数 ...

  8. linux 创建线程 execvp,execvp使用实例

    最近学习工作流 推荐一个activiti 的教程文档 全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Con ...

  9. Linux创建线程读取双口数据,linux环境下读写一次双口ram尽然要十几个毫秒。(附驱动代码)...

    linux环境下读写一次双口ram尽然要十几个毫秒.(附驱动代码) 我用的双口ram是IDT70V28,手册上说的读写时间应该是几个纳秒,我写了个linux驱动,然后做测试,发现读写一次的时间尽然是十 ...

  10. linux创建线程未定义,Linux中未定义的对p线程_CREATE的引用

    Linux中未定义的对p线程_CREATE的引用#include #include #define NUM_THREADS     5void *PrintHello(void *threadid){ ...

最新文章

  1. android进度指示器_等待的痛苦—浏览进度指示器地狱的7个级别
  2. 轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能 demo
  3. oracle11g中的join,sql - 使用Oracle 11g中的+符号进行左外连接
  4. 分布式事物一致性设计思路
  5. Linux内核参数(如kernel.shmmax)及Oracle相关参数调整(如SGA_MAX_SIZE)
  6. centos系统 查看当前python执行的进程
  7. 电脑插上U盘双击打不开应用程序右键可以打开问题
  8. clickhouse 数据存储
  9. 彗星撞地球-Warez组织的经典力作(15G动画压缩成64Kb的那个,2004年的第一名)
  10. Vue 下载本地静态资源static文件夹
  11. 【笔记】分类问题的模型评估(Precision, recall, F-measures)
  12. tools: USB、MiniUSB、MicroUSB接线
  13. 清除电脑缓存的bat文件
  14. uni-app活动倒计时功能
  15. 给定3个数字,求出这3个数字中的最大数,并输出最大数
  16. nodejs安装及配置
  17. Python 中的取余与取整操作
  18. ios手写_如何在iOS 10中发送手写和数字触摸消息
  19. 1159 Palindrome
  20. 蓝屏代码0X0000007B的解决办法

热门文章

  1. sqlplus登录、连接命令
  2. C# Parse和Convert的区别分析
  3. python range 和 xrange 区别
  4. JDBC插入百万数据,不到5秒!
  5. 端午节那晚,见了个小学时的同学!
  6. 【QA】揭开知识库问答KB-QA的面纱1·简介篇
  7. 来字节一年多,我都经历了什么?
  8. 数据预处理—4.为什么要趋近于正态分布?详解
  9. 吴恩达深度学习——卷积神经网络基础
  10. Netty in action—Netty传输服务