当多个线程访问一个共享的变量的时候是非常危险的,可能会拿到错误的数据或者程序崩溃!
所以为了安全的使用线程引入了互斥量的做法
两个互斥量的函数为
pthread_mutex_lock(pthread_mutex_lock* lock)
pthread_mutex_unlock(pthread_mutex_lock* lock)
具体使用也很简单
static int total_count;//全局变量
pthread_mutex lock = PTHREAD_MUTEX_INITIALIZER;//申请个互斥锁并且给其初始化
在每个线程里修改total_count全局变量的地方添加上
pthread_mutex_lock(&lock); //加锁
total_count++; //修改共享变量的值
pthread_mutex_unlock(&lock); //解锁
互斥量的作用在于当这个变量lock的时候,别的线程去也执行到这个lock的地方,那就会在这个地方挂起等待这个变量的解锁。当锁被另外一个线程解开的时候,另外线程就会在lock的地方结束挂起,继续执行,lock锁然后去操作变量。如果有一个线程不遵守这个规则直接去修改变量那就没办法了,这个就是没加锁导致线程不安全的隐患了。如果有一个线程加了锁又一直没有解锁,那就会导致线程死锁。