欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > Linux-线程.线程同步(1)

Linux-线程.线程同步(1)

2025/4/27 16:10:31 来源:https://blog.csdn.net/hxd030228/article/details/142924660  浏览:    关键词:Linux-线程.线程同步(1)

1.线程的概念
进程是一个动态的概念,就是一个程序正在执行的过程,线程就是进程内部的一条执行路径,或者一个执行序列

2.操作系统中线程的实现
在操作系统中,线程的实现有以下三种方式,
内核级线程
用户级线程
组合级线程

用户级线程创建的开销小,无法使用多处理器资源:
内核级线程创建的开销大,可以利用多处理器资源

3.Linux中线程的实现:(特别重要)
Linux实现线程的机制非常独特.从内核的角度来讲,它并没有线程这个概念;
Linux把所有的线程都当作进程来实现:
内核并没有准备特别的调度算法或是定义特别的数据结构来表征线程
相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的task struct
所以在内核中,它看起来就像是一个普通的进程(只是线程和其他一些进程共享某些资源,如地址空间)

4.进程与线程的区别:(面试重点)
进程是资源分配的最小单位,线程是CPU调度的最小单位:
进程有自己的独立地址空间,线程共享进程中的地址空间:
进程的创建消耗资源大,线程创建相对消耗小;
进程的切换开销大,线程的切换开销相对较小:

5.线程的接口相关函数
1.创建线程的接口
1)pthread create

int pthread create(pthread t *thread, const pthread attr t *attr,void *(*start routine),(void *),void *arg);
pthread create()用于创建线程
thread:接收创建的线程的 ID
指定线程的属性,一般不设置线程属性为NULL;
attr:
start routine: 指定线程函数,这个线程函数的参数为void *,返回值也为void *:这是一个函数指针。
arg: 给线程函数传递的参数(线程刚启动,线程函数的参数为void*,给它传参就是void *)
//成功返回 8,失败返回错误码

(2).pthread_join

​
int pthread join(pthread_t thread, void **retval);
pthread join()等待 thread 指定的线程退出,线程未退出时,该方法阻塞
retval:接收 thread 线程退出时,指定的退出信息​

(3).pthread_exit

int pthread_exit(void *retval);
pthread exit()退出线程
retva1:指定退出信息

5.创建线程(主线程和线程的并发运行)

#include
{
#include<stdio.h>
#include<stdlib.h>
#include <pthread.h>
void * thread fun(void *arg)
{
printf("hello fun!\n");
}
int main()
{
pthread_t id;
pthread_create(&id,NULL,thread fun,NULL);
printf("hello main!\n");
exit(0);
}
//id开始是没有值的,执行pthread create之后填充值


fun函数和main函数同时改为循环打印,观察一下同时执行
注意,速度太快,用sleep停一下,否则太快没法观察

修改后的代码:

#include<stdio.h>
#include<stdlib.h>
#include <pthread.h>
void *thread fun(void *arg)
{
for(int i=0;i<10;i++)
printf("fun run!\n");
sleep(1);
}
int main()
pthread_t id;
pthread_create(&id,NULL,thread fun,NULL);
for(int i=0;i<10;i++)
printf("main run!\n");
sleep(1);
exit(0);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词