linux线程

来源:互联网 发布:淘宝美工全攻略阅读 编辑:程序博客网 时间:2024/05/13 05:08
线程  区别于进程


它用于通信并发机制

意义:线程之间资源共享,弥补了进程的不足(进程资源独立)
区别:


1.进程是资源分配和管理的最小单位
  线程是系统调度的最小单位
2.关系
   一个进程可以包含多个线程
3.进程之间资源独立,一个进程包含的线程之间资源共享
4.资源使用限制
线程 ---人为控制,一般不超过10M,例如栈空间
进程 ---内存大小
注:线程使用资源是有限的,单线程使用栈内存不超过8M,ulimit -s可以查看
线程如何突破资源限制?
线程函数中一般都使用函数指针来操作主线程中的堆空间
char *szName=(char *)malloc(128);
pthread_create(X,X,X,szName)
...
free(szName)
故线程函数中尽量少使用局部变量






共同:进程线程都是为了合理有效地利用计算机资源
应用系统:多增加一个进程的资源开销是多增加一个线程的资源开销的几十倍


线程5种状态:创建,就绪,运行,阻塞,销毁


运行机制:
多进程:父进程执行完毕,子进程可以继续执行(资源独立)
多线程:主线程结束,子线程都会消亡(资源共享)


线程相关的系统调用  编译和链接时加上-pthread
1.创建 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);
//第一个参数是创建后新线程的ID号的地址,第二个参数是线程创建时赋予的属性结构体的地址,NULL的话就是默认属性,
//第三个参数是对该线程的处理函数名,第四个参数是传给前面的函数名的参数,注意类型void *,万能指针


2.销毁 void pthread_exit(void *retval);
//退出可以传出*retval


3.等待 int pthread_join(pthread_t thread, void **retval);
//等待线程结束,调用该函数的线程才继续执行,retval放退出状态exit status


4.获得线程id  pthread_t pthread_self(void);


注意:有时一个进程可以当成一个线程,例如主进程--》主线程,当然它的进程id与线程id是不同的






线程的结束方式:
主线程中取消任意一个子线程
子线程取消其它子线程
1.pthread_exit 销毁退出
2.pthread_cancel 取消(id)
3.exit 进程退出(若某个线程函数调用该函数则当前进程及其他进程都结束)


线程的清理
pthread_cleanup_pop()
pthread_cleanup_push()
当线程异常退出时收回线程资源
建议:子线程直接使用主线程资源


线程同步处理
1.线程互斥锁
2.条件变量
---进程同步/线程同步

1.初始化 int pthread_mutex_init(pthread_mutex_t *mp, const pthread_mutexattr_t *mattr);
2.上锁 pthread_mutex_lock(&mutex)
3.解锁 pthread_mutex_unlock(&mutex)
4.销毁 pthread_mutex_destroy(&mutex)






0 0
原创粉丝点击