首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏奔跑的蛙牛技术博客

    并发知识6

    并发散列映射的批操作 javase8 为散列映射提供批操作,即使有其他线程在处理映射,这些操作也能安全的执行。

    34420发布于 2018-09-05
  • 来自专栏跟我一起学 K8s

    并发安全 map

    简介并发安全 map,上一篇讲解了go 源码自带的 sync.Map{} 的源码实现;本篇文章主要是根据 github.com/orcaman/concurrent-map 中的代码实现,然后进行了相关代码的重构 github.com/libranwmq/cmap,后续需要使用并发安全 map 的童鞋,欢迎使用新的仓库,记得别忘了 star 一下。 VKeys() []KTuples() []Tuple[K, V]Clear()UnmarshalJSON(b []byte) errorMarshalJSON() ([]byte, error)}这里就是并发 nocopy.NoCopyslotNum intsloting SlotingFunc[K]slots []*ConcurrentMapSlotted[K, V]}concurrentMap:实际并发存储的

    20111编辑于 2025-07-10
  • 来自专栏sktj

    Go 并发安全

    互斥锁 image.png 读写互斥锁 image.png 一次性初始化 image.png

    45910发布于 2019-07-16
  • 来自专栏写代码和思考

    Go语言基础6 - 并发

    并发 通过通信共享内存 Go程 信道 信道中的信道 并行化 可能泄露的缓冲区 2. 错误 Panic 恢复 1. 并发 1.1 通过通信共享内存 在并发编程中,为实现对共享变量的正确访问需要精确的控制,这在多数环境下都很困难。 实际上,多个独立执行的线程从不会主动共享。 1.2 Go程 Go程具有简单的模型: 它是与其它Go程并发运行在同一地址空间的函数。 它是轻量级的, 消耗几乎就只有栈空间的分配。 当调用完成后, 该Go程也会安静地退出,示例: go list.Sort() // 并发运行 list.Sort,无需等它结束。 函数字面在Go程调用中非常有用。 备注:可理解 为匿名函数的调用。 } 1.4 信道中的信道 这种特性通常被用来实现安全、并行的多路分解。 在上一节的例子中,handle 是个非常理想化的请求处理程序, 但我们并未定义它所处理的请求类型。

    61400发布于 2020-03-16
  • 来自专栏changxin7

    6.并发编程,总结

    并发 2. 进行购买,向服务端发送请求,服务端接收请求,在后端将票数-1,返回到前端. [串行]. 当很多进程共强一个资源(数据)时, 你要保证顺序(数据的安全),一定要串行. 互斥锁: 可以公平性的保证顺序以及数据的安全. multiprocessing import Queue import random import time def producer(q, name): for i in range(1, 6) ==优点: 保证了Cpython解释器的数据资源的安全.== ==缺点: 单个进程的多线程不能利用多核.== Jpython没有GIL锁. pypy也没有GIL锁. 不同点: GIL锁全局解释器锁,保护解释器内部的资源数据的安全. GIL锁 上锁,释放无需手动操作. 自己代码中定义的互斥锁保护进程中的资源数据的安全.

    1.1K20发布于 2019-09-10
  • Go语言中的map是否并发安全?如何保证并发安全

    然而,在多线程并发的情况下,map 是否安全呢?如果你曾经在并发程序中使用过 map,你或许已经遇到过类似的问题:在多个goroutine并发读写 map 时,程序会崩溃或者结果不正确。 那么,Go语言中的 map 是否并发安全?我们该如何解决这个问题呢?今天,我们就来深入分析Go中 map 的并发安全问题,并讨论一些常见的解决方案。1. Go语言中的map并发安全问题Go语言中的 map 并不是并发安全的。也就是说,如果在多个goroutine中同时读写同一个 map,可能会引发运行时错误(runtime panic)。 因此,如果我们在并发环境中直接使用 map,没有采取任何同步机制,就会引发不安全的行为。 既然Go语言中的 map 并不是并发安全的,我们该如何解决这个问题呢?这里有几种常见的解决方案:3.1.

    35520编辑于 2025-09-04
  • 来自专栏分享/效率/工具/软件

    并发基础之线程安全

    ://blog.csdn.net/qq_37933685/article/details/80862795 个人博客:https://suveng.github.io/blog/​​​​​​​ 线程安全 即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其它线程干扰 2.有序性 在并发时,程序的执行可能就会出现乱序 一条指令的执行是可以分为很多步骤的 取指 IF 译码和取寄存器操作数 ID 执行或者有效地址计算 方法先于它的每一个动作 线程的所有操作先于线程的终结(Thread.join()) 线程的中断(interrupt())先于被中断线程的代码 对象的构造函数执行结束先于finalize()方法 5.线程安全的概念

    37930发布于 2019-09-18
  • 来自专栏java大数据

    并发事务的数据安全

    1)目标的提出:并发事务的数据安全 马克-to-win:在互联网环境中,我们经常遇到比如:1)春节抢票系统。2)淘宝中大家同时下单买最后的几十个商品。 这就促成了一个著名的艰难话题形成:互联网环境下并发甚至 高并发下的数据安全。马克-to-win:通常都是一个用户浏览器的请求由服务器端单例的Servlet一个线程来应答,即一个用户浏览器对应一个线程。 所以解决了n个事务同时操作同一行数据的安全问题,也就解决了互联网环境下并发甚至高并发下的数据安全的核心问题。所以本节要研究的目 标确定:并发事务的数据安全。 2)一个实际的案例引发的问题:“网络并发数据安全” 马克-to-win:假设你账户有800元,你要在淘宝买衣服,衣服600元。同时,你老婆要从你的账上转走600元到她自己的账户。 并发修改同一个数据。所以并 发访问的确存在安全问题。 更多请看: https://blog.csdn.net/qq_44638460/article/details/104157095

    64530发布于 2021-08-03
  • 来自专栏JUC并发原理与源码

    JUC并发—9.并发安全集合二

    大纲1.并发安全的数组列表CopyOnWriteArrayList2.并发安全的链表队列ConcurrentLinkedQueue3.并发编程中的阻塞队列概述4.JUC的各种阻塞队列介绍5.LinkedBlockingQueue 的具体实现原理6.基于两个队列实现的集群同步机制1.并发安全的数组列表CopyOnWriteArrayList(1)CopyOnWriteArrayList的初始化(2)基于锁 + 写时复制机制实现的增删改操作 的初始化并发安全的HashMap是ConcurrentHashMap并发安全的ArrayList是CopyOnWriteArrayList并发安全的LinkedList是ConcurrentLinkedQueue 所以CopyOnWriteArrayList可以保证多线程对数组写写 + 读写的并发安全并发安全的HashMap是ConcurrentHashMap并发安全的ArrayList是CopyOnWriteArrayList并发安全的LinkedList是ConcurrentLinkedQueue

    27710编辑于 2025-04-29
  • 来自专栏用户4352451的专栏

    并发安全问题总结

    什么是线程安全? 答:当并发的时候不会出现竞台条件,多个线程访问更改同一个资源的时候,这个数据不会出现意料之外的情况。 保证线程安全的几个基本特性? 代码层面的线程安全是如何体现的? 封装:通过封装,我们可以将对象内部状态隐藏、保护起来。

    71010发布于 2020-08-26
  • 来自专栏技术面面观

    Go 并发安全与锁

    并发安全,就是多个并发体在同一段时间内访问同一个共享数据,共享数据能被正确处理。” 个人建议只要涉及到共享变量统统使用channel,因为channel源码中使用了互斥锁,它是并发安全的。 我们可以不用,但不可以不了解,手中有粮心中不慌。 并发安全的例子 数组是并发安全的,在例子开始前我们要知道append函数的行为:长度足够在原数组cap内追加函数,增加len,长度不够则触发扩容,申请新数组cap增加一倍,赋值迁移。 以上并发操作的同一个资源,专业名词叫做临界区。 因为并发操作存在数据竞争,导致数据值意外改写,最后的结果与期待的不符,这种问题统称为竞态问题。 常见于控制商品减库存,控制余额增减等情况。 读写锁 互斥锁是完全互斥的,并发读没有修改的情况下是不会有问题的,也没有必要在并发读的时候加锁不然效率会变低。

    58720编辑于 2023-03-02
  • 来自专栏JUC并发原理与源码

    JUC并发—9.并发安全集合三

    大纲1.并发安全的数组列表CopyOnWriteArrayList2.并发安全的链表队列ConcurrentLinkedQueue3.并发编程中的阻塞队列概述4.JUC的各种阻塞队列介绍5.LinkedBlockingQueue (2)有界队列LinkedBlockingQueue一.并发安全的无界队列比如ConcurrentLinkedQueue,是没有边界没有大小限制的。它就是一个单向链表,可以无限制的往里面去存放数据。 二.并发安全的有界队列比如LinkedBlockingQueue,是有边界的有大小限制的。它也是一个单向链表,如果超过了限制,往队列里添加数据就会被阻塞。 然后使用ReentrantLock.lockInterruptibly()方法来获取一个可被中断的锁,加锁的目的是保证数据添加到队列过程中的安全性 + 避免队列长度超阈值。 这样在并发出队和入队的时候,出队和入队就可以同时执行,不会锁冲突。这也是锁优化的一种思想,通过将一把锁按不同的功能进行拆分,使用不同的锁控制不同功能下的并发冲突,从而提升性能。

    20700编辑于 2025-04-29
  • 来自专栏JUC并发原理与源码

    JUC并发—8.并发安全集合二

    在ConcurrentHashMap中,需要保证对该变量修改的并发安全。如果使用同步锁synchronized,那么性能开销比较大,不合适。 这是因为如果一个集合发生过并发,那么后续发生并发的可能性会更大。如果CAS累加baseCount失败,则尝试使用CounterCell来进行累加。 = null,再尝试对baseCount进行CAS累加 //这是因为如果一个集合发生过并发,那么后续发生并发的可能性会更大,这种思想在并发编程中很常见 if ((as = counterCells = null && b.hash >= 0) { synchronized (b) {//b就是链表,先用synchronized对b加锁,保证并发安全

    28510编辑于 2025-04-28
  • 来自专栏狗哥的 Java 世界

    Java 并发6)Semaphore 源码分析

    Semaphore (信号量) 是 JUC 包中比较常用到的一个类,它是 AQS 共享模式的一个应用,可以允许多个线程同时对共享资源进行操作,并且可以有效的控制并发数,利用它可以很好的实现流量控制。

    38410发布于 2020-04-07
  • 来自专栏JUC并发原理与源码

    JUC并发—8.并发安全集合一

    5.ConcurrentHashMap的Node数组初始化6.ConcurrentHashMap对Hash冲突的处理7.ConcurrentHashMap的并发扩容机制8.ConcurrentHashMap 2.ConcurrentHashMap的并发安全(1)如何理解ConcurrentHashMap的并发安全(2)ConcurrentHashMap在复合操作中的安全问题(3)ConcurrentMap可解决复合操作的安全问题 无法保证涉及多个线程的复合操作的正确性,复合操作会有并发安全问题。 如下代码在多线程并发调用时,会存在并发安全问题。虽然ConcurrentHashMap对于数据操作本身是安全的,但这里是复合操作,也就是"读—修改—写",而这三个操作作为一个整体却不是原子的。 ConcurrentHashMap是并发安全的,但对于其复合操作需要特别关注。

    23810编辑于 2025-04-28
  • 来自专栏别先生

    Java并发编程与高并发安全发布对象

    其次呢,线程看到的被发布对象的引用是最新的,然而呢,被发布对象的状态却是过期的,如果一个对象是可变对象,那么它就要被安全发布才可以。 2、安全发布对象的四种方式。    在类装载的时候进行创建保证了线程的安全性。 28 private static SingletonExample6 singletonExample6 = null; 29 30 // 静态块初始化对象singletonExample6 线程安全,推荐的方式。相比于懒汉模式,在安全性方面更容易保证,在饿汉模式,在安全性方面,在实际调用方面才可以初始化,不会造成资源的浪费。 线程安全,推荐的方式。 18 * 19 * 2、相比于懒汉模式,在安全性方面更容易保证,在饿汉模式,在安全性方面,在实际调用方面才可以初始化,不会造成资源的浪费。

    78710发布于 2020-02-12
  • 来自专栏大猪的笔记

    go 并发安全map新宠:xsync

    在go中,官方实现了并发安全的sync.Map。它的出现有一定争议(性能勉强),但因为并发安全,在go中仍然广泛使用。 此外,它还提供了Counter,MPMCQueue(bounded multi-producer multi-consumer concurrent queue),RBMutex等多种并发安全结构。

    42810编辑于 2024-06-12
  • 来自专栏springboot

    Java并发编程之线程安全

    1、线程安全问题 1.1、 线程出现问题的根本原因分析 线程出现问题的根本原因是因为线程上下文切换,导致线程里的指令没有执行完就切换执行其它线程了 示例 public class Test { EightLockTest(); new Thread(() -> e1.a()).start(); new Thread(() -> e1.b()).start(); } } 6. 成员变量和静态变量的线程安全分析 如果变量没有在线程间共享,那么变量是安全的 如果变量在线程间共享   1)如果只有读操作,则线程安全   2)如果有读写操作,则这段代码是临界区,需要考虑线程安全 局部变量线程安全分析 局部变量【局部变量被初始化为基本数据类型】是安全的 但局部变量引用的对象则未必 (要看该对象是否被共享且被执行了读写操作)   1)如果该对象没有逃离方法的作用范围,它是线程安全的   2)如果该对象逃离方法的作用范围,需要考虑线程安全 线程安全的情况 局部变量表是存在于栈帧中, 而虚拟机栈中又包括很多栈帧, 虚拟机栈是线程私有的; 局部变量【局部变量被初始化为基本数据类型

    24810编辑于 2025-01-21
  • 来自专栏小白debug

    socket是并发安全的吗

    那么,socket是并发安全的吗?能让这多个线程同时并发写吗? 并发读写socket 写TCP Socket是线程安全的吗? 对于TCP,我们一般使用下面的方式创建socket。 读TCP Socket是线程安全的吗? 在前面有了写socket是线程安全的结论,我们稍微翻一下源码就能发现,读socket其实也是加锁了的,所以并发多线程读socket这件事是线程安全的。 在TCP中,线程安全不代表你可以并发地读写同一个socket_fd,因为哪怕内核态中加了lock_sock(sk),这个锁的粒度并不覆盖整个完整消息的多次分批发送,它只保证单次发送的线程安全,所以建议只用一个线程去读写一个 多线程并发读/写同一个TCP socket是线程安全的,因为TCP socket的读/写操作都上锁了。 多线程并发读/写同一个UDP socket也是线程安全的,因为UDP socket的读/写操作也都上锁了。

    2.4K10编辑于 2022-12-02
  • 来自专栏ImportSource

    并发编程-什么是线程安全

    我如何区别线程安全的类和非线程安全的类呢?进一步说,“安全”(safe)的含义究竟是什么? 任何对线程安全性的定义中,最核心的概念就是正确性(correctness)。 一个线程安全的类的instance(实例)无论是在串行和并行的情况下都应该是坚挺的。(ps:就是说一个线程安全的类在任何情况下都应该是表现正常的。) 通常的话,线程安全的需求并不是让我们去直接使用线程,而是使用一些像Servlets框架的时候,会有线程安全的需求。 stateless对象一定是线程安全的 事实上大多数servlets都是无状态的,这就减轻了我们确保servlet线程安全的负担。 但,如果servlet们想要在处理请求时保存一些信息,这个时候线程安全性便会变成一个问题。(ps:因为一旦有了fields就意味着可能存在线程安全问题。)

    1K70发布于 2018-04-03
领券