Linux——pthread_create()

本文深入解析了pthread_create函数,这是Unix、Linux和MacOSX等操作系统用于创建线程的关键函数。文章详细介绍了函数的原型、参数及其注意事项,包括如何正确传递参数以避免不可预测的结果,以及如何使用pthread_join函数确保线程资源的正确回收。此外,还讨论了线程分离属性的设置及其对资源管理的影响。

1 pthread_create

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

       函数原型声明:

#include <pthread.h>
int pthread_create(
  pthread_t *restrict tidp,           //指向新创建线程标识符的指针
  const pthread_attr_t *restrict attr,//设置线程属性,默认为NULL
  void *(*start_rtn)(void *),         //线程运行函数的起始地址
  void *restrict arg                  //运行函数的参数结构,默认为NULL
                  );
//成功,返回0;出错,返回错误码。

        传递参数注意的问题:

问题: 
避免直接在传递的参数中传递发生改变的量,否则会导致结果不可测。 
即使是只再创造一个单线程,也可能在线程未获取传递参数时,线程获取的变量值已经被主线程进行了修改。

通常解决方案: 
重新申请一块内存,存入需要传递的参数,再将这个地址作为arg传入。

2 使用注意事项

  • 配套使用pthread_join函数

       在默认情况下通过pthread_create函数创建的线程是非分离属性的,由pthread_create函数的第二个参数决定,在非分离的情况下,当一个线程结束的时候,它所占用的系统资源并没有完全真正的释放,也没有真正终止。此时只有在pthread_join函数返回时,该线程才会释放自己的资源。 

       pthread_join()函数会一直阻塞调用线程,直到指定的线程终止。当pthread_join()返回之后,应用程序可回收与已终止线程关联的任何数据存储空间。 
      但是,同时需要注意,一定要和上面创建的某一线程配套使用,这样还可以起到互斥的作用。否则多线程可能抢占CPU资源,导致运行结果不确定。

  • 设置线程是detached(分离属性的)

        还可以在线程创建时或者在 thread function 中调用中将其设置其为分离属性(第二个参数设定),这样一个线程结束会立即释放它所占用的资源。

 

pthread_join()函数原型

int pthread_join(

    pthread_t tid,    //需要等待的线程,指定的线程必须位于当前的进程中,而且不得是分离线程

    void **status     //线程tid所执行的函数返回值(返回值地址需要保证有效),其中status可以为NULL

);

pthreadlinux系统的默认库, 需手动链接-线程库 -lpthread

返回值: 
调用成功返回0. 
ESRCH 
描述: 没有找到与给定的线程ID 相对应的线程。(如果多个线程等待同一个线程终止,则所有等待线程将一直等到目标线程终止。然后一个等待线程成功返回。其余的等待线程将失败返回ESRCH错误) 
EDEADLK 
描述: 将出现死锁,如一个线程等待其本身,或者线程A和线程B 互相等待。 
EINVAL 
描述: 与给定的线程ID相对应的线程是分离线程。

 

 

更多详细程序见:多线程之pthread_create()函数 

更多对pthread_create参数的解析见:多线程pthread_create的参数

对线程创建个数的探讨参考:linux——pthread_create()到底可以创建多少个线程?

scr屏幕保护程序来自windowsXP操作系统的屏幕保护程序26个(全部正常使用),其中有17个兼容windows10。windows7/8/8.1/2008/2012待测试。。+热带鱼屏保 SN在文件“+热带鱼屏保 SN.txt“中。使用方法:把scr格式的文件拷贝到windows系统的windows\system32中即可,然后就可以在”桌面>设置>屏幕保护程序”中找到,windows10在任务栏搜索“屏幕保护”就找到屏幕保护程序设置。-------------------------兼容windows10的屏幕保护程序17个:+Flurry-eng(对显卡要求很高).scr+Images of Ireland.scr+Kaleidomorph变换曲线【colour】.scr+logon(windows XP).scr+Particle Fire(流星火焰).scr+Skyrocket(OpenGL,星夜焰火-eng).scr+贝塞尔曲线.scr+单线条(飞舞变化,无设置).scr+多线条(彩色随机变化,无设置).scr+飞越星空.scr+肥皂泡泡(无设置).scr+三维飞行物(3Dwindows徽标).scr+三维管道(OpenGL).scr+三维花盒.scr+三维迷宫(OpenGL).scr+璇彩泡泡.scr+Matrix(矩阵世界3D屏保).scr-----------------------------只用于windowsXP的屏幕保护程序:+3D文字.scr+aurora欧若拉(极光).scr+The Lost Watch 3D Screensaver.scr+XPize.scr+变换线.scr+夜光时钟.SCR+滚动字幕(输入文字).scr+热带鱼屏保 SN.txt+热带鱼屏保.scr+自定义图片屏保.scr-------------------------windows10默认屏保:3D文字变换线彩带空白气泡照片windows光盘安装文件下载、迅雷子帐号共享请加QQ群221906427-->软件硬件学习交流关键字:scr 屏保 屏幕保护程序 xp16:20 2021/10/12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值