线程的创建示例

进程:执行一个程序所分配的资源的总称,是程序的一次执行过程。

进程主要内容有:正文段、用户数据段、系统数据段(进程控制块pcb(pid、优先级、文件描述符)、cpu寄存器值、堆栈)。

进程分为交互进程、批处理进程和守护进程。

交互进程:在shell下启动,在前台运行,(./name &) 也可以在后台运行。

批处理进程:和终端无关,被放到作业队列中顺序执行。(一般管理员用的多)

守护进程:和终端无关,一直在后台运行。(除非关闭os)

进程创建: pid_t fork(void)

进程回收 pid_t wait(int *status) //没有及时回收会导致僵尸进程,成功返回子进程pid

进程结束:void exit(int status)

执行其他程序 int system( const char*command) 例如:system("./a.out")在一个程序中启动另一个程序。

常用命令有 ps -ef 、top 看pid

线程:通常指共享相同地址空间的多个任务,大大提升了任务切换的效率,因为每个进程都参与内核的进程调度,进程切换时系统开销较大,所以os引入了轻量级进程LWP。

线程共享资源:指令、静态数据(全局变量)、进程中的文件描述符。

线程私有资源:线程ID、程序计数器和相关的寄存器、堆栈、优先级、执行状态和属性。

线程的创建:int pthread_create(pthread_t * thread, NULL, void * (*routine)(void*),NULL)

线程的回收:int pthread_join(pthread_t thread, void **returnvalue)

线程的结束:void pthread_exit(void * returnvalue) 返回值可以被 pthread_join获取

下面给出线程的一个示例代码:

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

char message[64]="I love you!";   //定义全局变量让线程可以共享
void *thread_func(void *arg);

int main(void)
{
	pthread_t a_thread;
	void *result;
	if(pthread_create(&a_thread,NULL,&thread_func,NULL)!=0)
	{
		printf("pthread_create is failed!\n");
		exit(-1);
	}
	pthread_join(a_thread,&result); //result接收线程结束的返回值
	
	printf("result: %s\n",(char *)result);  //result是无类型的需转换
	printf("message: %s \n",message);
	
	return 0;
}
void *thread_func(void *arg)
{

	strcpy(message,"I love you three thousand times!");
	pthread_exit("come from pthread_exit");
	
}

运行结果如下:

总结:

线程是共享相同地址空间的任务

编译的时候要注意 gcc -o test test.c -lpthread 这和前面介绍的库的用法一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值