线程的存在是为实现资源的共享。
因此多个线程同时访问共享数据时可能会冲突,为了解决这种冲突我们需要引入互斥锁。互斥锁的目的是为了保护公共资源(临界资源),但是互斥锁自身又要被多个线程所看到,因此互斥锁也是一个临界资源。因此在上锁和解锁的时候一定要保证原子操作,否则这个互斥锁就会变得毫无意义,使得多个线程依然可以去同时访问这个临界资源。
多个线程产生访问冲突会导致不可预知的结果,举个例子:
#include<stdio.h>
#include<pthread.h>
static int count =0;
void* pthread_run(void *val)
{
int i=0;
int sum=0;
while(i<5000)
{
++i;
sum=count;
printf("process :%d,pthread :%u,count :%d\n",getpid(),pthread_self(),count);
count=sum+1;
//++count;
}
}
int main()
{
pthread_t id1;
pthread_t id2;
pthread_create(&id1,NULL,pthread_run,NULL);
pthre