嵌入式Linux多任务编程,进程、线程剖析

//嵌入式Linux多任务编程,进程、线程剖析
//多任务处理:是指用户可以在同一时间运行多个程序,每个应用程序被称作一个任务
/*
进程:是指一个具有独立功能的程序在某个数据集合上的一次动态执行过程,它是系统进行资源分配和
调度的基本单元
*/
/*
线程:线程是进程内独立的一条运行路线,也可以称为轻量级进程。线程可以对进程的内存空间和资源进行访问,一个进程可以拥有多个线程
*/
/*****************************进程*******************************/

//fork()函数,它用于从已存在的进程中创建一个新进程。新进程称为子进程,原进程称为父进程。

/************************fork()函数语法**************************/
/*
	头文件
			#include<sys/types.h>提供pid_t的定义
			#include<unistd.h>
	函数原型
			pid_t fork(void);
	函数返回值
			0 :子进程
			大于0 :父进程
			-1 :error
*/
#include<stdio.h>
#include<sys/types.h>//提供pid_t的定义
#include<unistd.h>
void main()
{
	pid_t result;
	result=fork();
	if(result==-1)
	{
		printf("error\n");
	}
	else if(result==0)
	{
		printf("return pid value is %d\tPID=%d\n",result,getpid());
		//子进程号
	}
	else
	{
		printf("return ppid value is %d\tPPID=%d\n",result,getppid());
		//父进程号
	}
}
//exec函数族提供了进程中启动另一个程序执行的方法
/*
	函数原型
			int excel(const char *path,const char *arg,...);
			...
*/
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
int x;
pid_t wait(int *status);
void main()
{
	printf("please enter a number in 1 or 2\n");
	scanf("%d",&x);
	if(fork()==0)
	{
		switch(x)
		{
			case 1:execl("./p","./p",(char*)0);//p,m可执行文件
							
			case 2:execl("./m","./m",(char*)0);
		}
	}
	else wait(NULL);
}


/*****************************线程*******************************/
#include<stdio.h>
#include<pthread.h>
void sleep(int);
void *mythread(void *a)
{
	char *str=(char*)a;
	int i;
	for(i=0;i<8;i++)
{
	printf("%s,%d\n",str,i);
	sleep(1);
	}
}
void main()
{
	pthread_t pth1,pth2;
	char *str1="a";
	char *str2="b";
	pthread_create(&pth1,NULL,mythread,str1);
	pthread_create(&pth2,NULL,mythread,str2);
	while(1);
}
//创建线程pth1,pth2
//pthread_create函数
//编译gcc 文件名 -lpthread

#include<stdio.h>
#include<pthread.h>
int a=1,b=1;
int c;
void *mythread(void *x)
{
	int n=*(int *)x;
	c=a+b;
	a=b;
	b=c;
	printf("f[%d]=%d,",n,c);
	
}
void main()
{
	pthread_t pth[10];
	int i;
	for(i=0;i<9;i++)
	pthread_create(&pth[i],NULL,mythread,&i),
	//pthread_join(pth[i],NULL);//解决线程输出
	printf("\n");
	
}
/*
所需头文件 #include <pthread.h>

互斥锁初始化:  pthread_mutex_init()
互斥锁上锁:    pthread_mutex_lock()
互斥锁判断上锁:pthread_mutex_trylock()
互斥锁接锁:    pthread_mutex_unlock()
消除互斥锁:    pthread_mutex_destroy()

pthread_mutex_init()函数
函数原型 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
函数传入值:mutex:互斥锁
          mutexattr:PTHREAD_MUTEX_INITIALIZER:创建快速互斥锁
                    PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP:创建递归互斥锁
                    PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP:创建检错互斥锁
函数返回值:成功:0 出错:返回错误码

函数原型:
int pthread_mutex_lock(pthread_mutex_t *mutex,)
int pthread_mutex_trylock(pthread_mutex_t *mutex,)
int pthread_mutex_unlock(pthread_mutex_t *mutex,)
int pthread_mutex_destroy(pthread_mutex_t *mutex,)
函数传入值 mutex:互斥锁
函数返回值:成功:0 出错:-1
*/
//参考:https://blog.csdn.net/makercloud/article/details/80230559
//互斥锁
//互斥锁:是用一种简单的加锁方法来控制对共享资源的操作
#include<stdio.h>
#include<pthread.h>
int n=50000;
pthread_mutex_t mutex;
void *mythread(void *x)
{
	int i;
	pthread_mutex_lock(&mutex);
	for(i=0;i<10000;i++)
		n--;
	pthread_mutex_unlock(&mutex);
	printf("%d\n",n);
	
}
void main()
{
	pthread_t pth[10];
	int i;
	for(i=0;i<9;i++)
		{
			pthread_create(&pth[i],NULL,mythread,NULL);
		}
		sleep(10);
}
发布了50 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41865104/article/details/90750790