线程的相关知识

  • 线程的基本概念:
  • 1、线程实质上是轻量级的进程
  • 2、引入线程后,线程替代进程,成为系统调度的基本单位
  • 3、线程不会分配内存空间,一个进程中的多线程是共用进程的内存空间;
  • 4、多线程没有多进程安全,一个线程结束,其余的线程都不能执行;
  • 5、多线程比多进程的效率更高线程间资源共享
  • 6、编写代码时,需要添加头文件(#include);
  • 7、编译时,需要链接线程库(gcc xxx.c -lpthread);
  • 8、同进程一样,进程也是时间片轮转上下文切换
  • 线程的状态:
  • 1、结合态所有的线程默认是结合态,结合态的线程必须由其他线程调用pthread_join函数回收资源;
  • 2、分离态:使用pthread_detach函数,将线程设置成分离态,线程结束后由OS自动回收资源
  • 相关的API:
  • 一、创建线程:
	#include 
	int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
	                   void *(*start_routine) (void *), void *arg);
	/*
	参数:

	    	thread: 创建的线程的线程号
	
	    	attr: 线程属性 传 NULL 表示使用默认属性
	
	    	start_routine: 线程处理函数--线程体
	
	    	arg: 线程处理函数的参数

	返回值:
	
	    	成功  	0
	
	    	失败  	错误码 
	*/	
  • 二、返回当前线程的线程号
	#include 
	pthread_t pthread_self(void);
	/*
	返回值:

			总是成功 当前线程的线程号
	*/
  • 三、退出线程:
	#include 
	void pthread_exit(void *retval);
	/*
	参数:

			退出线程时的返回值 给 pthread_join 使用的

	返回值:
	
			无
	*/
  • 四、阻塞等待一个结合态的线程退出,回收资源:
	#include 
	int pthread_join(pthread_t thread, void **retval);
	/*
	参数:

			thread:线程的id
		
			retval:接受pthread_exit返回的值的 如果不关心 传NULL即可

	返回值:
	
	    	成功  0
	
	    	失败  错误码
	*/
  • 五、将线程设置成分离态:
	#include 
	int pthread_detach(pthread_t thread);
	/*
	参数:	
			thread:线程的id

	返回值:
			成功 	 0
		
			失败  	错误码
	*/
  • 六、pthread_cancel函数:
	#include 
	int pthread_cancel(pthread_t thread);
	/*
	功能:
			给线程发一个取消信号
		
			线程能否被取消以及能否被立即取消取决于线程的 state 和 type
		
			也就是与下面两个函数有关
		
			7.pthread_setcancelstate函数
		
			8.pthread_setcanceltype函数
	
	参数:
			thread:线程的id
	
	*/
	//7.pthread_setcancelstate函数
	int pthread_setcancelstate(int state, int *oldstate);
	/*
	参数:
	
			state:	PTHREAD_CANCEL_ENABLE  		//可被取消(默认状态)
			
					PTHREAD_CANCEL_DISABLE  	//不可被取消
					
			oldstate: 可传参NULL
	*/
	
	//8.pthread_setcanceltype函数
	int pthread_setcanceltype(int type, int *oldtype);
	/*
	参数:
	
			type:	PPTHREAD_CANCEL_ASYNCHRONOUS  		//可被立即取消(默认状态)
			
					PTHREAD_CANCEL_DEFERRED  			//不可被立即取消
					
			oldtype: 可传参NULL
	*/

你可能感兴趣的:(编程基础,C语言)