计算机系统&线程
2022-07-11 10:34:36 0 举报
计算机系统&线程
作者其他创作
大纲/内容
生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据),等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样,也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者。通常采用进程间通信的方法解决该问题。如果解决方法不够完善,则容易出现死锁的情况。出现死锁时,两个线程都会陷入休眠,等待对方唤醒自己。该问题也能被推广到多个生产者和消费者的情形。
调用方法
线程1
对象3
栈
指令+函数
https://blog.csdn.net/liushall/article/details/81569609
答案是B
对象2
创建对象
栈底
main1函数
线程3
出现一个问题
对象1
为进程保存一堆信息: 数据集A为线程保存一堆信息: 数据集B
线程2
对象锁
因为springboot是font color=\"#f44336\
JVM
需要被处理的数据
各种语言
操作系统怎么干呢? 需要创建一个数据结构: 记录内存的起始地址和长度这个数据结构叫做进程( Process )第一个要被执行的函数叫做入口函数: main函数
需要干两件事
寄存器
硬件
1. 进程是需要占用内存空间的,如果多个进程基于同一个可执行程序,那么这些进程其内存区域中的内容几乎完全相同,这显然会造成内存的浪费2. 计算机处理的任务可能是比较复杂的,这就涉及到了进程间通信,由于各个进程处于不同的内存地址空间,进程间通信天然需要借助操作系统,这就在增大编程难度的同时也增加了系统开销
生产者-消费者问题
为什么springboot项目中可以这么写呢?
单独一个sychronized修饰方法
一个入口函数只能被一个CPU执行
CPU(执行指令)
提交给线程池的任务
我们写的程序(指令+函数)
内存
线程2指令2
线程池
软件
指令的地址
两种思路
sychronized(当前类.class)
只创建一个对象
线程1指令1
windows
CPU群
main2函数
编译器
static sychronized
总结一下
全局锁
用全局锁
操作系统
线程池
1. 在内存中找到一块空间存储可执行的程序
一个Process
....
处理数据的函数
把\"指令+函数\"编译成可执行的程序给内存
如何改进呢?
将 类 作为锁定的对象,每次只能有一个对象进入该类即: 该对象干完他所有的事以后才可以创建第二个对象
sychronized(this)
0 条评论
下一页
为你推荐
查看更多