Unix多线程

本文详细介绍了多线程编程的基础知识,重点讲解了pthread库中pthread_create()和pthread_join()函数的使用方法,包括参数解释、函数原型及注意事项,帮助读者理解如何在Linux环境下创建和管理线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​ 关于多线程的使用,需要添加头文件pthread.h。

​ 注意!!!由于其不是Linux系统默认库,因此编译时需要加上-lpthread参数以调用静态链接库。

​ 关于其大体就是关于两个函数的应用,分别是pthread_create()和pthread_join()函数

###pthread_create()

​ 该函数用来创建线程,它的函数原型是:

#include <pthread.h>
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,
(void*)(*start_rtn)(void*),void *arg);

​ 第一个参数tidp代表指向线程标识符的指针,第二个参数attr用来设置线程属性(可为空),第三参数start_rtn是线程所运行的回调函数,第四个参数是回掉函数的参数(可为NULL)

​ 它的返回值为0代表运行成功,否则返回出错编号

​ 关于其回掉函数的格式:

void *函数名(void *参数名);

###pthread_join()

​ 该函数用来等待指定线程的结束,它的函数原型是:

int pthread_join(pthread_t thread, void **retval);

​ 其中第一个参数thread代表线程标识符,第二个参数retval用来存储回掉函数的返回值(可以为NULL),注意,第二个参数是二级指针

​ 该函数如果成功运行返回0,否则返回错误编号

###注意点

​ 系统默认创建的线程是非分离式的,在非分离式的情况下一个线程结束后其所占用的系统资源并没有真正的释放(也就是说线程并未真正结束),因为我们需要与pthread_join()函数联用才可以确保线程释放

​ 或者采用方法二:设置线程属性为分离式,这样就可以保证线程结束后立即释放所占用的资源。注意!!!设置为分离式的线程不可以用pthread_join()函数等待!!

​ 具体做法如下:

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

void *run(void *arg) {
    printf("ok\n");
}

int main () {
    pthread_t thread;
	pthread_attr_t attr;
	pthread_attr_init(&attr);
	pthread_attr_setdetachstate(&attr, 1);
	pthread_create(&thread, &attr, run, NULL);
	sleep(1);
	return 0;
}

转载请注明出处!!!

如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值