Linux C编程--线程操作2--线程同步详解.pdf

Linux C编程--线程操作2--线程同步详解.pdf

ID:52242338

大小:394.04 KB

页数:8页

时间:2020-03-25

Linux C编程--线程操作2--线程同步详解.pdf_第1页
Linux C编程--线程操作2--线程同步详解.pdf_第2页
Linux C编程--线程操作2--线程同步详解.pdf_第3页
Linux C编程--线程操作2--线程同步详解.pdf_第4页
Linux C编程--线程操作2--线程同步详解.pdf_第5页
资源描述:

《Linux C编程--线程操作2--线程同步详解.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、DLUTBruceZhang的专栏生活就是需要有创意--例如:Coding&&Debug[置顶]LinuxC编程--线程操作2--线程同步详解分类:LinuxC编程2013-03-0610:21465人阅读评论(0)收藏举报互斥锁LinuxC编程线程同步条件变量信号量linux线程同步之互斥在windows中,为了让多个线程达到同步的目的,在对于全局变量等大家都要用的资源的使用上,通常得保证同时只能由一个线程在用,一个线程没有宣布对它的释放之前,不能够给其他线程使用这个变量。在windows里,我们可以用时EnterCriticalSection

2、()和LeaveCriticalSection()函数.那么在linux里,有什么类似的机制呢?这里介绍互斥锁。1.申请一个互斥锁pthread_mutex_tmutex;//申请一个互斥锁你可以声明多个互斥量。在声明该变量后,你需要调用pthread_mutex_init()来创建该变量。pthread_mutex_init的格式如下:intpthread_mutex_init(pthread_mutex_t*mutex,constpthread_mutexattr_t*mutexattr);第一个参数,mutext,也就是你之前声明的那个互斥

3、量,第二个参数为该互斥量的属性。属性定义如下:互斥量分为下面三种:l快速型(PTHREAD_MUTEX_FAST_NP)。这种类型也是默认的类型。该线程的行为正如上面所说的。l递归型(PTHREAD_MUTEX_RECURSIVE_NP)。如果遇到我们上面所提到的死锁情况,同一线程循环给互斥量上锁,那么系统将会知道该上锁行为来自同一线程,那么就会同意线程给该互斥量上锁。l错误检测型(PTHREAD_MUTEX_ERRORCHECK_NP)。如果该互斥量已经被上锁,那么后续的上锁将会失败而不会阻塞,pthread_mutex_lock()操作将会返

4、回EDEADLK。可以通过函数注意以下语句可以做到将一个互斥锁快速初始化为快速型。pthread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER;2.销毁一个互斥锁1pthread_mutex_destroy()用于注销一个互斥锁,API定义如下:intpthread_mutex_destroy(pthread_mutex_t*mutex)销毁一个互斥锁即意味着释放它所占用的资源,且要求锁当前处于开放状态。由于在Linux中,互斥锁并不占用任何资源,因此LinuxThreads中的pthread_mutex_dest

5、roy()除了检查锁状态以外(锁定状态则返回EBUSY)没有其他动作。3.上锁(相当于windows下的EnterCriticalSection)在创建该互斥量之后,你便可以使用它了。要得到互斥量,你需要调用下面的函数:intpthread_mutex_lock(pthread_mutex_t*mutex);该函数用来给互斥量上锁。互斥量一旦被上锁后,其他线程如果想给该互斥量上锁,那么就会阻塞在这个操作上。如果在此之前该互斥量已经被其他线程上锁,那么该操作将会一直阻塞在这个地方,直到获得该锁为止。在得到互斥量后,你就可以进入关键代码区了。4.解锁

6、(相当于windows下的LeaveCriticalSection)在操作完成后,你必须调用下面的函数来给互斥量解锁,也就是前面所说的释放。这样其他等待该锁的线程才有机会获得该锁,否则其他线程将会永远阻塞。intpthread_mutex_unlock(pthread_mutex_t*mutex);5..pthread_mutex_trylock如果我们不想一直阻塞在这个地方,那么可以调用下面函数:intpthread_mutex_trylock(pthread_mutex_t*mutex)如果此时互斥量没有被上锁,那么pthread_mutex

7、_trylock()将会返回0,并会对该互斥量上锁。如果互斥量已经被上锁,那么会立刻返回EBUSY。注:下面介绍一个实例说明上述函数的用法这是一个简单的读写程序,在这个程序中,一个线程从共享的缓冲区中读数据,另一个线程向共享的缓冲区中写数据。对共享的缓冲区的访问控制是通过使用一个互斥锁来是实现的。2#include#include#include#include#defineFALSE0#defineTRUE1voidreadfun();voidwritefun();

8、charbuffer[256];intbuffer_has_item=0;intretflag=FALSE,i=0;pthread_mu

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

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

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