线程竞争
在多线程的环境里,如果共享资源没有上锁,将会出现共享数据混乱的情况。
在单核CPU系统里,系统以时间片调度的方式让多个程序轮流使用处理器,造成了【并发】的假象。
线程同步
互斥量
int pthread_mutex_init (pthread_mutex_t* mutex,const pthread_mutexattr_t* mutexattr);
//亦可 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_lock (pthread_mutex_t* mutex);
int pthread_mutex_unlock (pthread_mutex_t* mutex);
int pthread_mutex_destroy (pthread_mutex_t* mutex);
保证同一时间只有一个线程可以对共享资源进行操作,但是不保证同步
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
//全局变量
int n = 0;
pthread_mutex_t lock;
void *add(void *arg){
int i;
for(i=0;i<1000000000;i++){
//上锁
pthread_mutex_lock(&lock);
++n;
//解锁
pthread_mutex_unlock(&lock);
}
return NULL;
}
int main(){
pthread_mutex_init(&lock,NULL);//初始化互斥锁
pthread_t id1,id2;
int ret = pthread_create(&id1,NULL,add,NULL);
ret = pthread_create(&id2,NULL,add,NULL);
pthread_join(id1,NULL);
pthread_join(id2,NULL);
pthread_mutex_destroy(&lock);
printf("n = %d\n",n);
return 0;
}
当不上锁的时候
上锁
信号量
信号量(Semaphore),有时被称为