Pthread_create 线程创建|学习笔记

简介: 快速学习 Pthread_create 线程创建

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频Pthread_create 线程创建】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11058


Pthread_create 线程创建

 

内容介绍:

一、基础知识

二、线程的创建

三、实例

四、注意

 

一、基础知识

就像每个进程都有一个进程号一样,每个线程也有一个线程号。

进程号在整个系统中是唯一的,但线程号不同,线程号只在它所属的进程环境中有效。

进程号用 pid_t 数据类型表示,是一个非负整数。线程号则用 pthread_t 数据类型来表示。

有的系统在实现  pthread _t 的时候,用一个结构体来表示,所以在可移植的操作系统实现不能把它做为整数处理

 

二、线程的创建

通过多线程实现多任务

1.格式

#include <pthread. h>

int pthread_create (pthread_t  *thread, const pthread_attr_t  *attr,

void *( *start_routine)(void *) , void  *arg);

2.功能:

创建一个线程

3.参数:

thread:线程标识符地址。

attr:线程属性结构体地址。(一般用默认属性 NULL)

start_routine:线程函教的入口地址。

arg:传给线程函数的参数。

4.返回值:

成功:返回0

失败:返回非0

5.注意:

(1)与fork 不同的是 pthread_create 创建的线程不与父线程在同一点开始运行,而是从指定的函数开始运行,该函数运行完后,该线程也就退出了。

(2)线程依赖进程存在的,如果创建线程的进程结束了,线程也就结束了。

(3)线程更数的程序在 pthread 库中,故链接时要加上参数 lpthread。

 

三、实例

#incluce <stdio.h>

#include <unistd. h>

#include <pthread.h>

void *thread_fun1(void *arg)  

{

while(1){

printf(“this is thread 1\n”);

sleep(1) //每一秒打印一条消息

}

}

void *thread_fun2(void *arg)  

//如果第二个线程创建成功,则在该函数中执行任务

{

while(1){

printf(“this is thread 2\n”);

sleep(1)

}

}

int main(int argc , char  *argv[])  

//main 函数是主线程,main 函数结束则主线程也结束

{

pthread_t  tid1, tid2 ;  //保存线程号

int ret;

ret= pthread_create(&tid1,NULL,thread_fun1,NULL);  

//创建第一个线程

if(ret!= 0){        //判断是否成功
perror(“pthread_create”);

return 0;

}

ret= pthread_create(&tid2,NULL,thread_fun2,NULL);  

//创建第二个线程

if(ret!= 0){
perror(“pthread_create”);

return 0;

}

while(1);

//进入死循环,main 函数不结束,所以进程不结束,即线程不结束

return 0;

}


四、注意

在 main 函数中创建任务时,调度的顺序不一定,与操作系统的调度算法。

线程依赖进程存在,若将实例主函数中的 while(1);删除,则主线程结束,进程结束,即线程不复存在。

相关文章
|
8月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
152 0
|
3月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
131 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
3月前
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
382 0
|
5月前
|
调度
多线程学习笔记
这篇文章是多线程学习笔记,涵盖了线程与进程的概念、多线程实现方式、线程状态、线程同步与不安全示例、死锁问题以及生产者与消费者问题等多线程编程的关键知识点。
多线程学习笔记
|
8月前
|
NoSQL 网络协议 关系型数据库
redis-学习笔记(redis 单线程模型)
redis-学习笔记(redis 单线程模型)
65 3
|
8月前
|
安全 Java 编译器
多线程 (下) - 学习笔记2
多线程 (下) - 学习笔记
53 1
|
8月前
|
存储 算法 Java
多线程 (下) - 学习笔记1
多线程 (下) - 学习笔记
53 1
|
8月前
|
设计模式 安全 NoSQL
多线程 (上) - 学习笔记2
多线程 (上) - 学习笔记
52 1
|
8月前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
81 4
|
8月前
多线程学习笔记(一)
创建线程有3种方式:继承Thread类、实现Runnable接口或Callable接口。继承Thread类时,重写run()方法并调用start()启动线程。实现Runnable接口时,实现run()方法,通过Thread的target创建线程对象并用start()启动。
40 1