美文网首页
@synchronized 锁的坑点

@synchronized 锁的坑点

作者: 等一个最好的自己 | 来源:发表于2021-01-09 16:41 被阅读0次
for (int i=0; i<100000; i++) {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            @synchronized (self.dataArray) {
                self.dataArray = [NSMutableArray array];
            }
        });
    };

按道理来说,给dataArray加上锁是线程安全的,但是运行这行代码会报错。出现野指针

*** -[__NSArrayM release]: message sent to deallocated instance 0x600000ce11d0

这是为什么呢,首先先说一下 @synchronized,当@synchronized(nil)加锁对象是nil的时候,加锁会失效,就会走它里面的流程。不停的对dataArray进行创建新对象的时候,会执行新对象的创建,和旧对象的释放,会有那么一瞬间,存在哈希表中的dataArray会为nil,然后@synchronized就不加锁,导致self.dataArray连续执行release,从而出现野指针。

如有错误,请留言指正,谢谢!!!

相关文章

  • @synchronized 锁的坑点

    按道理来说,给dataArray加上锁是线程安全的,但是运行这行代码会报错。出现野指针 这是为什么呢,首先先说一下...

  • JAVA并发之synchronized

    synchronized synchronized 首先synchronized是jdk提供的内置锁,既然是锁那就...

  • 多线程优化--synchronized、Lock等优化

    1、synchronized (1)重量锁,轻量锁,偏向锁(synchronized自带的优化) (2)锁的粒度 ...

  • 并发编程:同步(synchronized、volatile、At

    1.synchronized关键字   synchronized 锁什么?锁对象。  可能锁对象包括: this,...

  • 并发

    锁:方法锁、对象锁、类锁1.方法锁(synchronized修饰方法时):synchronized放在方法和在方法...

  • Lock锁

    synchronized 锁和 Lock 锁的区别 Lock 锁,Java类,synchronized,关键字。s...

  • Java并发编程

    一、同步 1 synchronized关键字 synchronized锁什么?锁对象。 可能锁对象包括: this...

  • 高并发基础知识详细讲解

    Synchronized synchronized锁哪些东西? this(指的是当前对象) 临界资源(锁的是临界资...

  • AQS锁的原理

    synchronized是JVM层面实现的锁,而AQS是JDK层面实现的锁。关于synchronized锁,可以看...

  • @ synchronized

    递归锁: synchronized @synchronized ([NSObject new]) { //加...

网友评论

      本文标题:@synchronized 锁的坑点

      本文链接:https://www.haomeiwen.com/subject/dzbcaktx.html