您当前的位置: 首页 > 

我什么都布吉岛

暂无认证

  • 5浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

POSIX线程库(四)线程同步——互斥量

我什么都布吉岛 发布时间:2020-08-02 22:23:47 ,浏览量:5

互斥量与信号量非常相似,他允许程序员每一次锁住某个变量,使得每一次只能有一个线程访问他。

一、信号量是什么?

和信号量一样,互斥量用于保护一段代码的,保证一次只能被一个线程执行。

二、信号量API

使用一个信号量,其基本步骤是:

  • 声明一个互斥量
  • 初始化一个互斥量
  • 线程1使用pthread_mutex_lock获取执行权
  • 线程2使用pthread_mutex_unlock释放执行权
  • 销毁互斥量pthread_mutex_destory

线程头文件本身就有互斥量的定义,#include

声明
pthread_mutex_t lo;
初始化
int pthread_mutex_init (pthread_mutex_t *mutex,
			       const pthread_mutexattr_t *mutexattr)
  • pthread_mutex_t *__mutex互斥量地址
  • const pthread_mutexattr_t *__mutexattr互斥量属性地址
  • 返回值,没消息就是好消息,如果有,那就是错误代码
锁定、解锁
int pthread_mutex_lock(pthread_mutex_t * mutex);
int pthread_mutex_unlock(pthread_mutex_t * mutex);

pthread_mutex_lockpthread_mutex_unlock都接受一个互斥量地址。pthread_mutex_lock可能阻塞当前进程,阻塞的条件是,有另外的线程率先开了锁,阻塞的线程必须等待其他线程释放互斥锁。

销毁
int pthread_mutex_destory(pthread_mutex_t* mutex);

回收互斥锁的资源。

三、Demo time!!!
#include 
#include 
#include 
#include 

using namespace std;
pthread_mutex_t lo;

void* thfun1(void*)
{

    for (int i = 0; i             
关注
打赏
1658157489
查看更多评论
0.0577s