LINUX下C线程编程互斥

函数名

pthread_mutex_init

头文件

#include <pthread.h>

函数原型

int pthread_mutex_init(pthread_mutex_t * mutex,const pthread_mutexattr_t * attr);

函数功能

动态方式初始化互斥锁。下面是静态方式初始化互斥锁pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

参数说明

1.mutex:被初始化的互斥锁;
2.attr:新建互斥锁的属性;如果参数attr为空,则使用默认的互斥锁属性,默认属性为快速互斥锁。互斥锁的属性在创建锁的时候指定;attr的值可以是以下三种之一:
  PTHREAD_MUTEX_INITIALIZER:创建快速互斥锁;
  PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP:创建递归互斥锁;
  PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP:创建检错互斥锁;

函数返回值

成功:返回0;失败:返回错误号。

函数名

pthread_mutex_lock

头文件

#include <pthread.h>

函数原型

int pthread_mutex_lock(pthread_mutex_t *mutex);

函数功能

当pthread_mutex_lock()返回时,该互斥锁已被锁定。线程调用该函数让互斥锁上锁,如果该互斥锁已被另一个线程锁定和拥有,则调用该线程将阻塞,直到该互斥锁变为可用为止。

参数说明

1.mutex:被初始化的互斥锁。

函数返回值

成功:返回0;失败:返回错误号。

函数名

pthread_mutex_unlock

头文件

#include <pthread.h>

函数原型

int pthread_mutex_unlock(pthread_mutex_t *mutex);

函数功能

解锁互斥锁,与pthread_mutex_lock成对存在。

参数说明

1.mutex:需要解锁的锁变量对象。

函数返回值

成功:返回0;失败:返回错误号。

函数名

pthread_mutex_trylock

头文件

#include <pthread.h>

函数原型

int pthread_mutex_trylock(pthread_mutex_t *mutex);

函数功能

如果尝试给一个已由另外一个线程锁住的互斥锁上锁,那么pthread_mutex_trylock将立即返回,并返回错误码在errno中,为EBUSY。

参数说明

1.mutex:需要被上锁的锁变量对象。

函数返回值

成功:返回0;失败:返回错误号。

函数名

pthread_mutex_destroy

头文件

#include <pthread.h>

函数原型

int pthread_mutex_destroy(pthread_mutex_t *mutex);

函数功能

销毁一个互斥锁,即意味着释放它所占用的资源,且要求锁当前处于开放状态。

参数说明

1.mutex:需要被释放的锁变量对象。

函数返回值

成功:返回0;失败:返回错误号。

表15-2 条件变量相关函数列表

函数名

pthread_cond_init

头文件

#include < pthread.h>

函数原型

int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);

函数功能

用来初始化一个条件变量。他使用变量attr所指定的属性来初始化一个条件变量,如果参数attr为空,那么它将使用默认的属性来设置所指定的条件变量。

参数说明

1.cond:条件变量;
2.attr:条件变量属性。

函数返回值

成功:返回0;失败:返回错误号。

函数名

pthread_cond_destroy

头文件

#include < pthread.h>

函数原型

int pthread_cond_destroy(pthread_cond_t *cond);

函数功能

用来销毁所指定的条件变量,同时将会释放所给它分配的资源。调用该函数的线程也并不要求等待在参数所指定的条件变量上。

参数说明

1.cond:条件变量。

函数返回值

成功:返回0;失败:返回错误号。

函数名

pthread_cond_wait/pthread_cond_timedwait

头文件

#include < pthread.h>

函数原型

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t mutex, const struct timespec *abstime);

函数功能

条件变量等待。
函数pthread_cond_timedwait与函数pthread_cond_wait的区别在于,如果达到或是超过所引用的参数*abstime所指的时间,它将结束并返回错误ETIME。pthread_cond_timedwait函数的参数*abstime指向一个timespec结构。该结构如下:
typedef struct timespec{
 time_t tv_sec;
 long tv_nsex;
}timespec_t;

参数:

1.cond:条件变量;
2.mutex:互斥锁。

返回值: 

成功:返回0;失败:返回错误号。

函数名

pthread_cond_signal/pthread_cond_broadcast

头文件

#include < pthread.h>

函数原型

int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);

函数功能

当调用pthread_cond_signal时,一个在相同条件变量上阻塞的线程将被解锁。如果同时有多个线程阻塞,则由调度策略确定接收通知的线程。如果调用pthread_cond_broadcast,则将通知阻塞在这个条件变量上的所有线程。一旦被唤醒,线程仍然会要求互斥锁。如果当前没有线程等待通知,则上面两种调用实际上成为一个空操作。如果参数*cond指向非法地址,则返回值EINVAL。

参数说明

1.cond:条件变量。

函数返回值

成功:返回0;失败:返回错误号。

读写锁列表及相关函数:

函数名

pthread_rwlock_init

头文件

#include < pthread.h>

函数原型

int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr);

函数功能

此函数使用属性attr来初始化rwlock引用的读写锁。如果参数attr为空,使用默认的读写锁属性。也可以使用宏PTHREAD_RWLOCK_INITIALIZER初始化静态分配的读写锁。这相当于调用pthread_rwlock_init()动态初始化时指定的attr参数为NULL,区别在于,它不执行错误检查,将使用默认的属性初始化读写锁。

参数说明

1.rwlock:指向要初始化的读写锁的指针;
2.attr:指向属性对象的指针,该属性对象定义要初始化的读写锁的特性,此参数如果设置为NULL,则使用默认的属性。

函数返回值

成功:返回0;失败:返回错误号。

函数名

pthread_rwlock_destroy

头文件

#include < pthread.h>

函数原型

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

函数功能

用来销毁读写锁。

参数说明

1.rwlock:指向要销毁的读写锁的指针。

函数返回值

成功:返回0;失败:返回错误号。

函数名

pthread_rwlock_rdlock/pthread_rwlock_tryrdlock

头文件

#include < pthread.h>

函数原型

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);

函数功能

申请读锁。
函数pthread_rwlock_rdlock以阻塞方式申请读锁。函数pthread_rwlock_tryrdlock以非阻塞的方式来申请读锁。

参数:

1.rwlock:指向要上锁的读锁的指针。

返回值: 

成功:返回0;失败:返回错误号。

函数名

pthread_rwlock_wrlock/pthread_rwlock_trywrlock

头文件

#include < pthread.h>

函数原型

int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

函数功能

申请写锁。
函数pthread_rwlock_wrlock以阻塞方式申请写锁。函数pthread_rwlock_trywrlock以非阻塞的方式来申请写锁。

参数说明

1.rwlock:指向要上锁的写锁的指针。

函数返回值

成功:返回0;失败:返回错误号。

函数名

pthread_rwlock_unlock

头文件

#include < pthread.h>

函数原型

int pthread_rwlock_unlock(pthread_rwlock_t * rwlock);

函数功能

释放读写锁。无论是读锁还是写锁都是使用这个函数来释放锁的。
在使用此函数时需要注意以下情况。
(1) 如果调用此函数来释放读锁,但当前还有其他读锁锁定,则保持读锁锁定状态,只不过,当前线程已不再是其所有者之一。如果释放最后一个读锁,则读写锁将处于解锁状态。
(2) 如果调用此函数释放写锁,则置读写锁为解锁状态。

参数说明

1.rwlock:指向要释放的读写锁的指针。

函数返回值

成功:返回0;失败:返回错误号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值