线程之间的资源是共享的
一、互斥锁
(一)逻辑
不让线程自己私自访问共享资源
在访问共享资源之前先判断是否有人在使用,有人使用则先等待,否则就使用
(二)代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int count = 100;
pthread_mutex_t mutex; //诞生一把全局锁
void *new_thread(void *arg)
{
pthread_mutex_lock(&mutex); //上锁
printf("线程上锁成功\n");
if(count >= 100)
{
sleep(1);
count -= 100;
}
pthread_mutex_unlock(&mutex); //解锁
printf("线程解锁成功\n");
return NULL;
}
int main(void)
{
pthread_t tid; //创建线程
int retval;
pthread_mutex_init(&metex, NULL); //初始化互斥锁
retval = pthread_creat(&tid, NULL, new_thread, NULL);
if(retval != 0)
{
fprintf(stderr, "创建线程失败:%s\n", strerror(retval));
return -1;
}
pthread_mutex_lock(&metex); //上锁
printf("主线程上锁成功\n");
if(count >= 100)
{
sleep(1);
count -=100;
}
pthread_mutex_unlock(&metex); //解锁
printf("主线程解锁成功\n");
pthread_join(tid, NULL); //等待子线程介绍
pthread_mutex_destroy(&mutex); //销毁互斥锁