线程同步之互斥量mutex和条件变量ConditionVariable

版权声明:原创文章转载请注明出处~ https://blog.csdn.net/PecoHe/article/details/89490420

1.互斥锁(mutex)的概念

  • 多线程可以通过全局变量来共享信息,但是需要注意,多线程不可以同时修改同一个变量。操作系统课本中的临界区就是指访问某一共享资源的代码片段,这段代码执行的操作应该为原子操作,同时访问这片共享资源的其他线程不可以打断这段代码的执行。
  • 互斥量(也叫互斥锁)可以保证同时仅有一个线程可以访问某个共享资源,即可以使用互斥量来保证对该资源的原子访问。
  • 互斥量有已锁定(locked)和未锁定(unlocked)可以认为互斥量是一种特殊的信号量,即互斥量是只有0和1的信号量。如果对已经锁定的互斥量继续加锁,将会导致线程阻塞或者报错。
  • 如果有多个线程等待获取解锁的互斥量,则无法判断究竟哪一个线程会如愿以偿。

2.互斥锁常用系统调用

  • pthread_mutex_init() 初始化互斥量
#include<phread.h>
int phread_mutex_init(pthread_mutex_t *mutex);
  • pthread_mutex_lock() 锁定指定的互斥量
#include<phread.h>
int phread_mutex_init(pthread_mutex_t *mutex);
  • pthread_mutex_trylock() 非阻塞的锁定指定的互斥量
#include<phread.h>
int phread_mutex_init(pthread_mutex_t *mutex);
  • pthread_mutex_unlock() 释放指定的互斥量
#include<phread.h>
int phread_mutex_init(pthread_mutex_t *mutex);
  • pthread_mutex_destory() 销毁指定的互斥量
#include<phread.h>
int phread_mutex_init(pthread_mutex_t *mutex);

3.条件变量的概念

互斥量防止多个线程同时访问同一个共享变量。条件变量就允许一个线程就某个共享变量的状态变化通知其他线程,并让其他线程等待于这一通知。

4条件变量的常用系统调用

  • pthread_cond_init() 初始化条件变量
#include <pthread.h>
int pthread_cond_init(pthread_cond_t *cv,
					  const pthread_condattr_t *cattr);
  • pthread_cond_destroy()释放条件变量
#include <pthread.h>
int pthread_cond_destroy(pthread_cond_t *cv);
  • pthread_cond_wait() 阻塞在条件变量上
#include <pthread.h>
int pthread_cond_wait(pthread_cond_t *cv,
					  pthread_mutex_t *mutex);
  • pthread_cond_signal()解除在条件变量上的阻塞
#include <pthread.h>
int pthread_cond_signal(pthread_cond_t *cv);
  • pthread_cond_broadcast()释放阻塞的所有线程
#include <pthread.h>
int pthread_cond_broadcast(pthread_cond_t *cv);

猜你喜欢

转载自blog.csdn.net/PecoHe/article/details/89490420