线程
线程和进程的关系。线程--“轻量级的进程”,进程本身就是一个单线程。
线程是进程中的实体,一个进程可以拥有多个线程。
线程与进程的其它线程共享该 进程所拥有的全部资源 。
多线程可以实现多任务,使用的是并发机制。
线程和进程使用同一块内存,所有非局部变量的都可以共享 (fd,全局,堆)。进程结束,线程就不存在。
pthread_create()线程创建函数
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
返回值: 成功:0
失败:-1
pthread_t *thread:线程识别变量
const pthread_attr_t *attr:指定线程的属性,NULL表示使用缺省属性
如果进程中含有线程,必须加上线程库:
gcc pthread_create.c -o pthread_create -lpthread
pthread_exit()线程退出函数
#include <pthread.h>
void pthread_exit(void *retval);
无返回值
void *retval::线程退出时返回的值
pthread_join()线程等待退出函数
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
失败:错误码
pthread_t thread:线程识别变量
void **retval:等待的线程的返回值
线程销毁pthread_cancel()
int pthread_cancel(pthread_t thread);返回值: 成功:0
失败:-1
pthread_t thread:线程识别变量
线程属性
线程的分离和非分离
分离线程是主线程不需要回收子线程的资源,资源自行回收(自己收拾残局)
非分离线程是主线程必须回收子线程的资源。
pthread_join()
设置:
初始化: pthread_attr_init(pthread_attr_t *attr);
设置分离状态:pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
pthread_attr_init:线程属性初始化:
#include <pthread.h>int pthread_attr_init(pthread_attr_t *attr);
返回值: 成功:0
失败:非0
pthread_attr_t *attr:属性变量
pthread_attr_setdetachstate:设置分离状态
#include <pthread.h>
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
返回值: 成功:0
失败:非0
pthread_attr_t *attr:属性变量
int detachstate:
PTHREAD_CREATE_DETACHED:分离
PTHREAD_CREATE_JOINABLE:非分离(接合)