线程

本文详细介绍了线程管理的基本概念和技术,包括线程的创建、退出、挂起等操作,以及如何使用pthread_create、pthread_exit和pthread_join等函数。此外,还深入探讨了互斥锁的使用方法,包括初始化、上锁、解锁和销毁等关键步骤。

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

线程



创建线程:pthread_create函数。在线程创建以后,就开始运行相关的线程函数,在该函数运行完之后,该线程就退出了。另一种退出线程的方法是使用函数pthread_exit,这是线程的主动行为。

pthread_join可以用于将当前线程挂起,等待线程的结束。

线程创建和退出


pthread_creat函数语法要点

所需头文件

#include<pthread.h>

函数原型

intpthread_create (pthread_t * thread, pthread_attr_t * attr, void *( * start_routine) (void *), void arg)

函数传入值

thread:线程标识符。


start_routine:线程函数的起始地址。


函数返回值

成功:0


pthread_exit函数语法要点

所需头文件

#include<pthread.h>

函数原型

voidpthread_exit (void * retval)

函数传入值

retvalpthread_exit()调用者线程的返回值,可由其他函数如pthread_join来检查获取。

pthread_join函数语法要点

所需头文件

#include<pthread.h>

函数原型

intpthread_join (pthread_t thread, void ** thread_return)

函数传入值

thread:等待线程的标识符.




例子:


#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include</usr/include/pthread.h>


voidthread1()

{

intcount=0;


for(count=0;count<6;count++) {


printf("thisis a pthread_1\n");

if(2== count)

pthread_exit(0);

sleep(1);

}



}


voidthread_2()

{


intcount;


for(count=0;count<3;count++)

printf("thisis pthread 2");


pthread_exit(0);


}



intmain()

{

pthread_tid1,id2;


intret;


ret= pthread_create (&id1,NULL,(void *)thread1,NULL);


if(0 != ret) {

printf("create pthread error \n");

exit(1);

}

ret= pthread_create (&id2, NULL, (void *) thread_2, NULL);


if(0 != ret) {

printf("Create pthread error!\n");

exit(1);

}


pthread_join(id1, NULL);

pthread_join(id2, NULL);


exit(0);

}

编译时会出现错误::对‘pthread_create’未定义的引用,开始搜索的时候,知道缺少连-lpthread该库支持,使用:gcc-o thread -lpthread thread.c

仍然报出一样的错误。后面mangcc才知道Usage:gcc [options] file...

因此需要将库链接放在末尾。gcc-o thread thread.c -lpthread









线程属性:

pthread_create函数的第二个参数线程的属性。系统默认为非绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。

绑定属性:

绑定属性可以保证在需要的时刻总是有一个内核线程与之对应。而非绑定属性是指用户线程和内核线程关系不是始终固定的。是由系统来控制分配的。

分离属性:

分离属性决定一个线程以什么方式来终止自己,在非分离情况下,当一个线程结束时,它所占用的系统资源并没有释放,也就是没有真正的终止。只有当pthread_join函数返回时,创建的线程才释放自己占用的系统资源。而分离属性情况下,一个线程结束时立即释放它所占有的系统资源。



这些属性的设置都是通过一定的函数来完成的,通常首先调用pthread_attr_init函数进行初始化,之后再调用相应的属性设置函数。


设置绑定属性的函数为pthread_attr_setscope,设置线程分离属性的函数为pthread_attr_setdetachstate,设置线程优先级的相关函数为pthread_attr_getschedparam(获取线程优先级)和pthread_attr_setschedparam(设置线程优先级)。在设置完这些属性后,就可以调用pthread_create函数来创建线程了。



pthread_attr_init函数语法要点

所需头文件

#include<pthread.h>

函数原型

intpthread_attr_init (pthread_attr_t * attr)

函数参数

attr:线程属性

函数返回值

成功:0


出错:-1

pthread_attr_setscope函数语法要点

所需头文件

#include<pthread.h>

函数原型

intpthread_attr_setscope (pthread_attr_t * attr, int scope)

函数参数

attr:线程属性


scope


函数返回值

成功:0


出错:-1

pthread_attr_setdetachstate函数语法要点

所需头文件

#include<pthread.h>

函数原型

intpthread_attr_setdetachstate (pthread_attr_t * attr, intdetachstate)

函数参数

attr:线程属性


detachstate


函数返回值

成功:0


出错:-1


pthread_attr_getschedparam函数语法要点

所需头文件

#include<pthread.h>

函数原型

intpthread_attr_getschedparam (pthread_attr_t * attr, structsched_param * param)

函数参数

attr:线程属性


函数返回值

成功:0


pthread_attr_getschedparam函数语法要点

所需头文件

#include<pthread.h>

函数原型

intpthread_attr_setschedparam (pthread_attr_t * attr, struct_param *param)

函数参数

attr:线程属性


函数返回值

成功:0






线程访问控制:

互斥锁 mutex


互斥锁的操作主要包括以下几个步骤:


互斥锁初始化:pthread_mutex_init

互斥锁上锁:pthread_mutex_lock

互斥锁判断上锁:pthread_mutex_trylock

互斥锁接锁:pthread_mutex_unlock

消除互斥锁:pthread_mutex_destroy



互斥锁可以分为快速互斥锁、递归互斥锁和检错互斥锁。这三种锁的区别主要在于其他未占有互斥锁的线程在希望得到互斥锁时的是否需要阻塞等待。


快速锁是指调用线程会阻塞直至拥有互斥锁的线程解锁为止。


递归互斥锁能够成功地返回并且增加调用线程在互斥上加锁的次数。


检错互斥锁则为快速互斥锁的非阻塞版本,它会立即返回并返回一个错误信息。



pthread_mutex_init函数语法要点

所需头文件

#include<pthread.h>

函数原型

intpthread_mutex_init (pthread_mutex_t * mutex, constpthread_mutexattr_t * mutexattr)

函数参数

Mutex:互斥锁


Mutexattr



函数返回值

成功:0


出错:-1




pthread_mutex_lock函数语法要点

所需头文件

#include<pthread.h>

函数原型

intpthread_mutex_lock (pthread_mutex_t * mutex)


intpthread_mutex_unlock (pthread_mutex_t * mutex)


函数参数

Mutex:互斥锁

函数返回值

成功:0




内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值