Linux下线程实现
来源:互联网 发布:unity3d 捏脸 编辑:程序博客网 时间:2024/05/07 19:05
1.线程概述
进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。
线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道执行路径,他们共享一个进程的资源。
因为线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源。
2.线程创建和退出
在linux中,一般采用Pthread线程库实现线程的访问与控制,由POSIX提出,具有良好的可移植性。
创建线程使用pthread_create函数。在线程创建以后,就开始运行相关的线程函数。线程退出时使用函数pthread_exit,是线程的主动行为。注意进程退出时使用exit函数,线程中用pthread_exit替代exit。
由于一个进程中的多个线程共享数据段,因此通常在线程退出后,退出线程所占用的资源并不会随线程结束而释放。所有需要pthread_join函数来等待线程结束,类似于wait系统调用。
3.函数原型
#include <pthread.h>
pthread_create(pthread_t *thread, pthread_attr_t *attr,void *(*start_routine)(void *),void *arg)
thread:线程标识符
attr:线程属性设置
start_routine:线程函数起始地址
arg:传递给start_routine的参数
pthread_exit( void *retval ) //线程内退出
retval: pthread_exit调用者线程的返回值,可由其他函数和pthread_join来检测获取。
pthread_cancel(pthread_t thread ) //线程外退出
pthread_join( pthread_t th,void **thread_return )
th:等待线程的标识符
thread_return:用户定义指针,用来存储被等待线程的返回值
pthread_t pthread_self( void ); 获取当前线程ID
创建线程与主线程通信实例:
#include <iostream>#include <pthread.h>using namespace std;//char str[100];//线程之间可以通过全局变量通信void *fun(void *arg)//线程之间也可以通过参数进行联系{ //设置当前线程自我保护,拒绝其他线程发送过来的取消请求 pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL); char *str = (char*)arg; while(1) { time_t t; time(&t); cout<<t<<":"; cout<<str<<endl;//主线程循环输出普通线程说的话 sleep(1); } return NULL;}int main(){ char str[100]; cin>>str;//主线程输入想说的话 pthread_t id; pthread_create(&id,NULL,fun,str);//创建线程,接收参数str,不断输出 sleep(3); pthread_cancel(id);//取消id线程 pthread_join(id,NULL); return 0;}
运行效果:
打印出hello的同时,还可以继续输入普通线程想说的话,两个线程并发执行。
- Linux下线程实现
- linux下实现线程暂停
- Linux下线程池实现
- Linux下C线程池的实现
- linux下的c++线程池实现
- Linux C下实现线程池
- Linux下C线程池的实现
- Linux下C线程池的实现
- Linux下简单线程池的实现
- Linux下C线程池的实现
- Linux下多线程实现以及线程同步
- Linux下C线程池的实现
- Linux下简单线程池的实现
- Linux下简单线程池的实现
- Linux下C线程池的实现
- Linux下C线程池的实现
- Linux下C实现线程池
- linux下线程池原理及实现
- oracle判断表中的字段是否存在,表在数据库中是否存在
- 说说mysql的那些事
- 对常见的三个免费数据库软件的一些个人看法
- 数据库的Union、Union All、Intersect、Minus
- python文件操作
- Linux下线程实现
- DSP之外部设备连接接口之HPI
- mysql查询结果分页显示
- hoj 题目分类
- HDU 1010 Tempter of the Bone(奇偶剪枝)
- U-boot移植 (v2012.04.1 S3C2440平台) (二) Nand flash 启动支持
- C面试题目3
- 于娟的忠告----生命只有一次,活着才是王道啊!!!
- Hibernate框架学习(简介)