线程间竞争
一、基本概念
原子操作:中途不会被打断的操作称为原子操作(不会被其他
线程竞争影响的操作)
竞争与同步:
同一个进程中的线程共享进程中绝大多数资源,当它们随意竞争
时可能会导致资源被破坏、脏数据、不完整、不一致的情况
通过一些方法让线程在竞争资源时相互协调,避免出现以上情况,
这种线程间协调工作称为线程同步
临界区和临界资源:
能够被多个线程同时访问的代码称为临界区、被同时访问的资源称为
临界资源
二、互斥量(互斥锁)
有些系统的man手册没有关于mutex的文档需要安装:
sudo apt-get install manpages-posix-dev
pthread_mutex_t 是一种数据类型 可以定义互斥量变量
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
功能:初始化一个互斥量
mutex:要初始化的互斥量变量
attr:对互斥量的属性进行设置,一般给NULL即可
注意:一般默认是开锁状态,也可使用PTHREAD_MUTEX_INITIALIZER
对互斥量变量进行初始化
例如:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_lock(pthread_mutex_t *mutex);
功能:对互斥量进行加锁,成功则继续执行下文,失败则阻塞,
直到互斥量被解锁并加锁成功,才返回
int pthread_mutex_trylock(pth