一起talk C栗子吧(第一百一十五回:C语言实例--线程同步之互斥量一)


各位看官们,大家好,上一回中咱们说的是线程同步之信号量的例子,这一回咱们说的例子是:线程同步之互斥量。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们, 今天我们将介绍使用互斥量进行线程同步。互斥量的核心操作是加锁/解锁操作,我们可以使用相关的函数来进行加锁/解锁操作。接下来我们介绍与互斥量相关的函数。

pthread_mutex_init函数

int pthread_mutex_init (pthread_mutex_t *__mutex,const pthread_mutexattr_t *__mutexattr)

该函数用来对互斥量进行初始化。该函数有两个参数,接下来我们分别介绍他们。

  • 第一个参数是指向互斥量的指针,函数会对该指针所指的互斥量进行初始化操作;
  • 第二个参数是指向互斥量属性的指针,函数可以把互斥量属性的值修改成该指针所指变量的值;
  • 该函数运行成功时返回零,否则返回相应的错误代码。

pthread_mutex_destroy函数

int pthread_mutex_destroy (pthread_mutex_t *__mutex)
  • 该函数用来销毁互斥量相关的资源;
  • 该函数只有一个参数,参数是指向互斥量的指针,函数会销毁与互斥量相关的资源;
  • 该函数运行成功时返回零,否则返回相应的错误代码。

加锁操作的函数

int pthread_mutex_lock (pthread_mutex_t *__mutex)
  • 该函数用来对互斥量进行加锁操作;
  • 该函数只有一个参数,参数是指向互斥量的指针,函数会对该指针所指的互斥量进行加锁操作;
  • 该函数运行成功时返回零,否则返回相应的错误代码。

使用该函数时需要注意以下两点事项:

  1. 如果互斥量已经被加锁,那么其它线程使用该函数加锁时会阻塞该线程,直到互斥量被解锁为止;
  2. 如果互斥量已经被加锁,那么同一线程对互斥量再次进行加锁,那么就会发生死锁;
int pthread_mutex_trylock (pthread_mutex_t *__mutex)
  • 该函数用来对互斥量进行尝试性加锁操作;
  • 该函数只有一个参数,参数是指向互斥量的指针,函数会对该指针所指的互斥量进行加锁操作;
  • 该函数运行成功时返回零,否则返回相应的错误代码。

该函数可以看作是pthread_mutex_lock函数的补充,它对互斥量进行尝试性加锁操作,尝试性的含义就是说,如果互斥量已经被加锁,那么它不会去对互斥量进行重复加锁操作,因此,现线程不会被阻塞,更不会发生死锁,而是返回EBUSY。

pthread_mutex_unlock函数

int pthread_mutex_unlock (pthread_mutex_t *__mutex)
  • 该函数用来对互斥量进行解锁操作;
  • 该函数只有一个参数,参数是指向互斥量的指针,函数会对该指针所指的互斥量进行解锁操作;
  • 该函数运行成功时返回零,否则返回相应的错误代码。

各位看官,关于线程同步之互斥量的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值