概述
操作系统:16、线程同步之互斥量
- 互斥锁
互斥锁
原子性:
- 一系列操作不可被中断的特性;
- 这一系列操作要么全部执行完成,要么全部没有执行;
- 不存在部分执行部分未执行的情况;
互斥量
- 互斥量是最简单的线程同步的方法;
- 互斥量(互斥锁)处于两种状态之一:解锁和加锁;
- 两个状态可以保证资源访问的串行;
操作系统直接提供了互斥量的API,开发者可以直接使用API完成资源的加锁、解锁操作;比如c的api:pthread_mutex_t。
互斥锁的例子
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <vector>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int num = 0;//临界资源
//生产者
void *producer(void*){
int times = 100000000;
while(times --){
pthread_mutex_lock(&mutex);//加锁
num += 1;
pthread_mutex_unlock(&mutex);//解锁
}
}
//消费者
void *comsumer(void*){
int times = 100000000;
while(times --){
pthread_mutex_lock(&mutex);//加锁(互斥锁)
num -= 1;
pthread_mutex_unlock(&mutex);//解锁(互斥锁)
}
}
int main(){
printf("Start in main function.");
//创建线程1和线程2
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, &producer, NULL);//线程1执行生产者逻辑
pthread_create(&thread2, NULL, &comsumer, NULL);//线程2执行消费者逻辑
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("Print in main function: num=%dn", num);
return 0;
}
最后
以上就是聪明帆布鞋为你收集整理的操作系统:16、线程同步之互斥量互斥锁的全部内容,希望文章能够帮你解决操作系统:16、线程同步之互斥量互斥锁所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复