欢迎来到天天文库
浏览记录
ID:34707928
大小:49.78 KB
页数:5页
时间:2019-03-09
《linux线程同步之互斥量(mutex)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Linux线程同步之互斥量(mutex)互斥量(也称为互斥锁)出自POSIX线程标准,可以用来同步同一进程中的各个线程。当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步。 互斥量,从字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用于保护临界区(共享资源),以保证在任何时刻只有一个线程能够访问共享的资源。 互斥量类型声明为pthread_mutex_t数据类型,在中有具体的定义。 1、互斥量初始化和销毁/*Initializeamutex. */i
2、ntpthread_mutex_init(pthread_mutex_t*__mutex,__constpthread_mutexattr_t*__mutexattr);/*Destroyamutex. */intpthread_mutex_destroy(pthread_mutex_t*__mutex); 上面两个函数分别由于互斥量的初始化和销毁。 如果互斥量是静态分配的,可以通过常量进行初始化,如下:pthread_mutex_tmlock=PTHREAD_MUTEX_INITIALIZER; 当然也可以通过pthread_mutex
3、_init()进行初始化。对于动态分配的互斥量由于不能直接赋值进行初始化就只能采用这种方式进行初始化,pthread_mutex_init()的第二个参数是互斥量的属性,如果采用默认的属性设置,可以传入NULL。 当不在需要使用互斥量时,需要调用pthread_mutex_destroy()销毁互斥量所占用的资源。 2、互斥量的属性设置/*初始化互斥量属性对象*/intpthread_mutexattr_init(pthread_mutexattr_t*__attr);/*销毁互斥量属性对象 */intpthread_mutexattr_d
4、estroy(pthread_mutexattr_t*__attr);/*获取互斥量属性对象在进程间共享与否的标志*/intpthread_mutexattr_getpshared(__constpthread_mutexattr_t*__restrict__attr,int*__restrict__pshared);/*设置互斥量属性对象,标识在进程间共享与否*/intpthread_mutexattr_setpshared(pthread_mutexattr_t*__attr,int__pshared); 互斥量在初始化的时候pthrea
5、d_mutex_init的第二个参数是互斥量的属性,如果为NULL空指针,那么就使用默认属性。 互斥量属性的数据类型为pthread_mutexattr_t,它的初始化和销毁和互斥量类似。一旦互斥量属性对象被初始化后,就可以通过调用不同的函数启用或禁止特定的属性。这里列出了一个设置特定属性的函数:pthread_mutexattr_setpshared,可以用于指定互斥量在不同进程间共享,这样可以通过互斥量来同步不同的进程,当然前提是该互斥量位于进程间的共享内存区。 pthread_mutexattr_setpshared()函数的第二个参
6、数__pshared用于设定是否进程间共享,其值可以是PTHREAD_PROCESS_PRIVATE或PTHREAD_PROCESS_SHARED,后者是设置进程间共享。 下面是使互斥量可以在进程间共享的大致过程:pthread_mutex_t*pSharedMutex; //指向共享内存区的互斥量pthread_mutexattr_tmutexAttr; //互斥量属性pSharedMutex=/*一个指向共享内存区的指针*/;pthread_mutexattr_init(&mutexAttr);pthread_mutexattr_setp
7、shared(&mutexAttr,PTHREAD_PROCESS_SHARED);pthread_mutex_init(pSharedMutex,&mutexAttr); 3、互斥量的使用/*Trylockingamutex. */intpthread_mutex_trylock(pthread_mutex_t*__mutex);/*Lockamutex. */intpthread_mutex_lock(pthread_mutex_t*__mutex);/*Unlockamutex. */intpthread_mutex_unlock(pt
8、hread_mutex_t*__mutex); 这几个函数都很简单,通过pthread_mutex_lock()函数获得访问共享资源的权限,如果已经
此文档下载收益归作者所有