目录
前言
线程指的是在一个进程中独立执行的最小单位。简单来说,线程是进程中的一个执行流,可以理解为执行程序的一条执行路径。本篇文章将对线程进行超详细讲解。
一、线程基础
1.概念
2.一个进程中多个线程特征
2.1 线程共有资源
2.2 线程私有资源
3.线程相关的api函数
3.1 创建线程
创建线程实例代码如下:
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void* fun(void* arg)
{
int i;
for(i = 0; i < 7; i++){
printf("我是fun\n");
sleep(1);
}
return 0;
}
int main(void)
{
int i;
pthread_t tid;
//fun();
if(pthread_create(&tid,NULL,fun,NULL)){
perror("pthread_create");
exit(1);
}
for(i = 0; i < 7; i++){
printf("我是主函数\n");
sleep(1);
}
return 0;
}
需要特别注意的是:
-lpthread和-pthread的区别
3.2 给线程函数传参
传参实例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
typedef struct{
int sno;
char name[20];
float score;
}St;
void* fun(void* arg)
{
St *p = (St*)arg;
//printf("%d\n",*(int*)arg);
//printf("%s\n",(char*)arg);
printf("%d %s %.2f\n",p->sno,p->name,p->score);
return 0;
}
int main(void)
{
pthread_t tid;
//int a = 120;
//char str[] = "hello world";
St s = {1001,"peter",98.56};
if(pthread_create(&tid,NULL,fun,&s)){
perror("pthread_create");
exit(1);
}
sleep(1);
return 0;
}
3.3 给线程收尸
收尸实例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
typedef struct{
int sno;
char name[20];
float score;
}St;
void* fun(void* arg)
{
static int a = 112200;
St *p = (St*)arg;
//printf("%d\n",*(int*)arg);
//printf("%s\n",(char*)arg);
printf("%d %s %.2f\n",p->sno,p->name,p->score);
return &a;
}
int main(void)
{
pthread_t tid;
int *p;
//int a = 120;
//char str[] = "hello world";
St s = {1001,"peter",98.56};
//创建子线程
if(pthread_create(&tid,NULL,fun,&s)){
perror("pthread_create");
exit(1);
}
//给指定线程收尸,如果子线程没有结束,则主线程阻塞
//if(pthread_join(tid,NULL)){
if(pthread_join(tid,(void**)&p)){
perror("pthread_join");
exit(1);
}
printf("*p = %d\n",*p);
return 0;
}
二、线程状态转换函数说明
1.初始化条件休眠
2.条件休眠,挂起线程
3.唤醒线程
4.设置取消状态
5.设置取消方式
6.取消线程
三 、线程状态转换图片(如图清晰可见)
总结
本篇文章针对C/C++ 线程进行详细讲解,希望能够帮到大家!
以后还会给大家展现更多关于嵌入式和C语言的其他重要的基础知识,感谢大家支持懒大王!
希望这篇博客能给各位朋友们带来帮助,最后懒大王请来过的朋友们留下你们宝贵的三连以及关注,感谢你们!