面试官突击:为啥局部变量是线程安全的?

多个线程同时访问共享变量时,会导致并发问题。那么,如果将变量放在方法内部,是不是还会存在并发问题呢?如果不存在并发问题,那么为什么不会存在并发问题呢? 著名的斐波那契数列 记得上学的时候,我们都会遇到这样一种题目,打印斐波那契数列。斐波那契数

C#多线程和异步之Task和async/await分析

一、什么是异步 同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法;当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调用者不用等待该方法执行完毕,我们称这

Linux互斥锁中的线程互斥锁

Linux实现的互斥锁机制包括POSIX互斥锁和内核互斥锁,本文主要讲POSIX互斥锁,即线程间互斥锁。 信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在sem_wait的时候,就阻塞在 那里)。而互斥

Linux系统分析—条件变量

当条件满足的时候,线程通常解锁并等待该条件发生变化,一旦另一个线程修改了环境变量,就会通知相应的环境变量唤醒一个或者多个被这个条件变量阻塞的线程。这些被唤醒的线程将重新上锁,并测试条件是否满足。一般来说条件变量被用于线程间的同步;当条件不满

Linux系统分析—线程属性

Linux系统分析—线程属性

但是,有时项目中我们对线程会有些特殊的要求,比如修改线程栈的大小,直接调用线程的库函数无法满足需求,在这种情况下我们可以直接对线程属性进行设置。 类型pthread_attr_t是一个结构体,主要包括如下属性:作用域(scope)、栈尺寸(stack size)、栈地址(st

Fork/Join原理知识点汇总

线程池、Future、CompletableFuture和CompletionService这些并发工具都是帮助SE站在任务角度解决并发问题,而非纠结于线程之间协作的细节,比如线程之间如何实现等待、通知。 简单并行任务 线程池+Future 组合拳 任务间有聚合关系 AND、OR聚合,CompletableF

多线程并发相关的面试题汇总

01 什么是线程? 线程是操作系统能够进运算调度的最单位,它被包含在进程之中,是进程中的实际运作单位,可以使多线程对进运算提速。 02 什么是线程安全和线程不安全? 线程安全: 就是多线程访问时,采了加锁机制,当个线程访问该类的某个数据时,进保护,其他

解析“线程安全”?

今日份的干粮: 1.什么叫线程安全? 2.线程安全与变量的关系? 变量又与堆/栈/静态存储区有密切关系 什么叫线程安全? 我们以常见的一行代码i++ ,i– 为例, 计算机的操作姿势可能与你想象的不一样。 在大多数计算机中, 给变量自增自减并不是原子操作, 需要下

掌握了Linux I/O机制,才能真的明白“什么是多线程”

用户进程向 CPU 发起 read 请求,CPU 向 DMA 发起 I/O 请求,DMA 再向磁盘发起 I/O 请求。这里的 DMA 全称为 Direct Memory Access,你可以简单理解为 CPU 内存和磁盘之间的代理。 磁盘向 CPU 发起 I/O 中断,CPU 拷贝数据,先是内核态 buffer,再到用户态 b

思考Linux 多线程中的信号量 Semaphore

Semaphore 再理解 我们来设想这样一个场景(上图):假如北京的国家大剧院有一场免费的音乐会演出,可是现在正值疫情期间,剧院规定:剧院观众总人数要限制,但是允许大家中途退场,把票给其他人,其他人可以中途进