Linux下线程编程实例详解

Linux下线程编程实例详解

ID:41152940

大小:575.33 KB

页数:11页

时间:2019-08-17

Linux下线程编程实例详解_第1页
Linux下线程编程实例详解_第2页
Linux下线程编程实例详解_第3页
Linux下线程编程实例详解_第4页
Linux下线程编程实例详解_第5页
资源描述:

《Linux下线程编程实例详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、linux下的多线程编程线程是cpu调度的基本单位,是进程的一部分,与同进程的线程共享该进程申请的资源,但是每个线程都有自己独立的寄存器和堆栈。包含头文件pthread.h创建线程intpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg);参数thread是一个pthead_t结构体的指针,保存了所创建的线程的信息;参数attr是一个pthread_attr_t结构体指针,设置创

2、建线程的属性;参数start_routine是一个函数体指针,用于启动线程;参数arg是start_routine的函数的参数;返回值:创建成功时返回0,失败时候返回一个错误代码(线程类的函数失败时不返回-1)不同于进程有自己独立的PID,创建线程无法直观的证明线程已经创建成功。结束线程voidpthread_exit(void*retval);参数retval表示返回的某个变量的的指针,该指针绝对不可能是局部变量的指针,因为局部变量会在线程出现严重问题的莫名的消失。如果进程在线程结束后与其归并到一起,用

3、phread_join()实现,该函数的原理与进程同步的wait系统调用相同。intpthread_join(pthread_tth,void**thread_return);参数th表示用于等待的线程;参数thread_return表示线程返回值的指针的指针;信号量线程同步线程的同步有两种基本的方法:信号量和互斥量。如果要控制内存访问,使内存在任意的时刻只有一个线程能够对他进行访问,则应该采用互斥量。但是如果说需要控制同等对象的访问权限,例如从5条电话线中给某一个进程分配一条,计数信号量就更为合适。下面

4、讲述用信号量进行线程的同步。线程中使用的基本信号量的函数有4个,都以sem_前缀。包含在头文件semaphore.h中。初始化信号量intsem_init(sem_t*sem,intpshared,unsignedintvalue);参数sem是sem_t结构的指针,用于保存信号量的信息;参数pshared用于控制信号量的类型;参数value表示信号量的初始值;修改信号量:intsem_wait(sem_t*sem);//信号量-1intsem_post(sem_t*sem);//信号量+1semwait

5、()如果信号量的值为0,那么sem_wait()函数会保留控制权,等信号量变为非零值后进行操作;sem_wait()函数其实是一个等待信号量变化的函数,也就是说,如果检测到信号量变化才往下执行,否则等待。Sem_post()是一个改变信号量的的函数,调用该函数触发sem_wait()往下执行。清理信号量intsem_destroy(sem_t*sem);互斥量进行线程同步互斥量相当于给某个对象上锁,每次只允许一个线程去访问它。如果说想对代码关键部分的访问进行控制,可以在进入该代码之前锁定一个互斥量。完成操

6、作后在解锁。互斥量也是有4个基本的函数。(包含在pthread.h头文件中)。intpthread_mutex_init(pthread_mutex_t*mutex,constpthread_mutexattr_t*mutexattr);初始化互斥量,mutex表示需要初始化的互斥量的指针,mutexattr表示互斥量的属性设置。默认类型fast。intpthread_mutex_lock(pthread_mutex_t*mutex);intpthread_mutex_unlock(pthread_mut

7、ex_t*mutex);intpthread_mutex_destroy(pthread_mutex_t*mutex);对于一个已经被锁住的互斥量在加锁,则会使得线程被阻塞。但是多个线程对资源进行竞争可能产生死锁的情况。比如所线程1锁定了资源A并申请资源B,线程2锁定资源B并申请资源A,这就造成了在无外力干扰下,线程1、2将永远阻塞,这就是死锁,死锁产生必须具备四个条件:互斥条件(资源只能由一个线程占用,如果被占用资源被申请,申请者只能等待);请求和保持条件(进程至少保持一个资源,但是又提出新的资源请求,

8、而该资源被其他的线程阻塞,但又不放弃已经占有的资源);不剥夺条件(已经申请到的资源,在为使用完成之前不能被剥夺,只能由自己释放);环路等待条件(发生死锁时,必然有一个进程、线程—资源的环形链)。线程的创建#include#include#include#include#includevoid*thread_function(vo

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。