上厕所想到的线程同步

2024-02-04 04:58
文章标签 线程 同步 厕所 想到

本文主要是介绍上厕所想到的线程同步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    作为一个程序员,每天都是喝水2小时,搬砖10分钟的,这不,刚喝完水,准备搬点砖了。

    众所周知,人在大量饮水的情况下,是会频繁上卫生间的,无论肾的好与坏。喝点水就想往厕所跑,这是惯出来的。

    公司在去卫生间的路上有一道门,这道门呢,关上了就锁住了,得输入密码才能打开;如果不锁呢,也没关系,上完厕所再关也可以;但是呢,一旦锁上门了,再打开就要输入密码,花费一点时间,而且门呢,这一开一关会产生电磁铁吸住-释放的声音,有点吵。

    平时一个人上厕所,关不关门都无所谓,我尿完了,回来顺手就可以关上;但是其他同事也要上厕所,人上完了,不关门,我待会回去可以关上,但是呢,他要是回去顺手把门一锁,我就得输入密码,“咔咔”的开门-关门,挺安静的一层楼被整得贼吵。

    现将上厕所这一场景抽象出来,小便池属于公共资源上厕所的人为线程门为锁(内核对象的公共资源,每次只有一个线程能拿到,那么公司的这道门自然就不是了,上大号的那道门才是),占用小便池就是业务处理时间,以下梳理整体流程:

    首先,suppose 公司的这道门平时都是打开的,一旦关闭,就无法从外面打开进入,只有小便完的人出来了,才能打开这道门,然后其他人才能进去。

    接着,我准备去卫生间了。这个时候门是开着的,表明没有人在占用小便池。当我进门的时候,我反手关上门了(获得锁了)。从外面看的话,同事看到门被锁上了,知道有人在上厕所,就不会进去了,只能坐在工位上多喝点水了。那么我呢,就可以去厕所撒尿了。对了,先洗手,再撒尿,尿完了,再洗手,就是这么讲究,就是这么prevent from病从口入。那么撒尿要多久呢,要看喝了多少水,咱们公司在29L,厕所这可以看到窗外的一大片马路,一般我会在这看一会来往的车流,美女是没有的,顺便照下镜子,看看今天的发量是否和昨天一样。待确认之后,就出卫生间洗手了,洗完手要甩两下(风干机是没有的)。好了,这下就要从一个短暂的通道回到刚刚关闭的门这了,现在,我要输入密码开门了(打开这个锁)。随着“咔咔”的声音响起,门开了。同事这会已经瞟向我这边了,水喝完了吗?(喝水的时间就是在等待,线程是由操作系统来分配调度的,当下一个时间片分给同事了,他就可以上厕所了)。当我走出来了的时候,他没跟我打招呼的就大踏步的进去了,顺便反手锁了门。此时,我又该喝我的水了,不是,是写我的这个段子了……

    

    

 

这篇关于上厕所想到的线程同步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676403

相关文章

时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。 NTP 实现什么目的?   目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就有误差,或快或慢的少几秒,时间长了甚至误差过分钟。 NTP 服务器列表 最常见、熟知的就是 www.pool.ntp.org/zo

Java线程面试题(50)

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程,

线程池ThreadPoolExecutor类源码分析

Java并发编程:线程池的使用   在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:   如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。   那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?

线程Lock

线程Lock   在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。   也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从s

线程封装,互斥

文章目录 线程封装线程互斥加锁、解锁认识接口解决问题理解锁 线程封装 C/C++代码混编引起的问题 此处pthread_create函数要求传入参数为void * func(void * )类型,按理来说ThreadRoutine满足,但是 这是在内类完成封装,所以ThreadRoutine函数实际是两个参数,第一个参数Thread* this不显示 解决方法: 第

Linux-笔记 线程同步机制

目录 前言 实现 信号量(Semaphore) 计数型信号量 二值信号量  信号量的原语操作 无名信号量的操作函数 例子 互斥锁(mutex) 互斥锁的操作函数 例子 自旋锁 (Spinlock) 自旋锁与互斥锁的区别 自旋锁的操作函数 例子 前言         线程同步是为了对共享资源的访问进行保护,确保数据的一致性,由于进程中会有多个线程的存在,

jmeter之Thread Group(线程组)

Thread Group(线程组) 1.线程组,或者可以叫用户组,进行性能测试时的用户资源池。 2.是任何一个测试计划执行的开始点。 3.上一篇提到的“控制器”和“HTTP请求”(采集器)必须在线程组内;监听器等其他组件,可以直接放在测试计划下。 线程组设置参数的意义 我们以下图为例,进行详细说明。见下图:  区域1(在取样器错误后要执行的动作) 这个区域的主要作用很明显,在线程内

如何在Android中实现多线程与线程池?

目录 一、Android介绍二、什么是多线程三、什么是线程池四、如何在Android中实现多线程与线程池 一、Android介绍 Android是一种基于Linux内核的开源操作系统,由Google公司领导开发。它最初于2007年发布,旨在为移动设备提供一种统一、可扩展的操作系统。Android系统以其高度的可定制性和丰富的应用生态而受到广泛欢迎,如今已经成为全球最流行的

java同步锁以及级别升级的理解

首先简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景: 偏向锁:只有一个线程进入临界区;轻量级锁:多个线程交替进入临界区;重量级锁:多个线程同时进入临界区。 还要明确的是,偏向锁、轻量级锁都是JVM引入的锁优化手段,目的是降低线程同步的开销。比如以下的同步代码块:   synchronized (lockObject) { // do something } 上述同步代码块

线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))

1通信机制:互斥与同步 线程的互斥通过线程的互斥锁完成; 线程的同步通过无名信号量或者条件变量完成。 2  互斥 2.1 何为互斥?         互斥是在多个线程在访问同一个全局变量的时候,先让这个线程争抢锁的资源,那个线程争抢到资源,它可以访问这个变量,没有争抢到资源的线程不能够访问这个变量。那这种只有一个线程能够访问到这个变量的现象称之为线程间互斥。 2.2互斥锁API 1.