线程操作

一.线程基本概念
1.线程就是进程中的执行路线,即进程内部的控制序列,或者说是进程的子任务(进程就是正在运行的程序,它是一个资源单位).

2.线程是轻量级的,没有自己独立的内存资源,使用的是进程的代码段,数据段,bss段,堆(没有栈),
环境变量表,命令行参数,文件描述符,信号处理函数,工作目录,用户ID,组ID等资源

3.线程有自己独立的栈,也就是有自己独立的局部变量

4.一个进程中可以拥有多个线程,即同时被系统调用的多条执行路线,但至少有一个主进程
二.线程基本特点
1.线程是进程的实体,可以作为系统独立的调度单位

2.线程有不同的状态,系统提供了多种线程控制的原语(控制方法)
比如创建线程,销毁线程

3.线程不拥有自己的资源(唯一拥有的就是自己的栈空间),只拥有从属于进程的全部资源,所有资源分配都是面向进程的

4.一个进程中可以有多个线程同时执行,他们可以执行相同的代码,也可以执行不同的代码

5.同一进程内的线程都在同一个地址空间下活动(0~4G),相对于多进程线程的系统开销小,任务切换快

6.多进程协同工作时需要通信,而多线程间的数据交换不需要依赖IPC特殊通信机制,简单而高效

7.每个线程拥有自己独立的线程ID,寄存器信息,函数栈等

8.线程之间拥有优先级

注意:进程与线程的区别
三.POSIX线程
1.早期的UNIX操作系统中是没有线程的,而是各计算机厂商提供了自己私有的线程库,不易移植

2.在1995年左右,定义了统一的线程编程接口,POSIX线程,即pthread

3.pthread包含一个头文件pthread.h,一个共享库libpthreaad.so

4.功能:
线程管理:创建/销毁,分离/联合,设置/获取属性
线程同步(互斥):互斥量(锁),条件变量,信号量,
四.线程函数

		#include <pthread.h>
       	int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
        功能:创建线程
        thread:获取线程ID
        attr:创建线程时所需要的属性设置,如果为NULL按照默认方式创建线程
        start_routine:线程的入口函数
        arg:给线程入口函数传递的参数

2.等待线程结束

 int pthread_join(pthread_t thread, void **retval);
		 功能:等待线程结束获取线程入口函数的返回值,线程结束时该函数才返回
		 thread:线程ID
		 retval:指针变量的地址,用于获取线程入口函数的返回值
		 注意:线程入口函数在返回数据时,不能返回指向私有栈空间的指针,如果获取到的是指向堆的指针,等待者要负责把该空间释放
		 注意:当主线程结束,子进程就会结束

3.获取线程ID

		 pthread_t pthread_self(void);
		 功能:返回线程ID

4.比较两个线程ID

		 int pthread_equal(pthread_t t1, pthread_t t2);
		 功能:如果两个线程ID是同一个线程则返回0,否则返回-1
		 注意:pthread_t不一定是 unsigned long 类型,有些系统中它是结构体类型,所以无法使用==比较

5.线程终止

		void pthread_exit(void *retval);
		功能:调用者线程结束(从入口函数return)
		retval:会返回给pthread_join的第二个参数
		注意:如果是进程的最后一个线程,当调用pthread_exit时进程也就结束了

6.线程分离
非分离:线程可以被创建者调用pthread_join等待(回收资源)
分离状态:线程不需要创建者等待,结束后自动回收资源

		int pthread_detach(pthread_t thread);
		功能:使调用线程与线程ID为thread线程成分离状态

7.线程取消

		int pthread_cancel(pthread_t thread);
		功能:向指定的线程发送取消操作
		注意:但对方不一定响应
		int pthread_setcancelstate(int state, int *oldstate);
		功能:设置调用者线程是否响应取消操作
		state:
			PTHREAD_CANCEL_ENABLE		允许响应
			PTHREAD_CANCEL_DISABLE		禁止响应
		oldstate:获取旧的响应状态	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值