• OC-NSTread


    每一个线程都可以持有一个该线程固有的NSMutableDictionary类型的字典

    创建线程

    +(void)datachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument

    官方解释:对对象aTarget调用方法创建新线程并执行
    aSelector必须是仅获取一个id类型参数且返回值为void的执行方法
    我觉得应该就是让aTarget对象执行aSelector消息 但是并不是用主线程来执行 而是新创建一个新线程来执行 执行结束后线程随之终止 线程从最初就和父线程分离 会自动创建自动释放池

    +(void)datachDrawingThread:(SEL)selector toTarget:(id)target withObject:(id)argument

    获取线程

    -(NSMutableDictionary*)threadDictionary 获取线程的字典

    中断线程

    +(void)sleepForTimeInterval:(NSTimeInterVal)ti 使线程中断几秒

    +(void)sleepUntilDate:(NSDate*)aDate

    执行依赖(没懂)

    -(void)performSelectorOnMainThread:(SLE)aSelector withObject:(id)arg waitUntiDone:(BOOL)wait

    选择器aSelector和参数arg中指定的方法的执行依赖于主线程。wait为YES时 当前线程会一直等待值执行接受 主线程中必须有runloop

    NSLock

    NSLock*countLock = [[NSLock alloc]init];
    [countLock lock];
    //[countLock lock];//注意 如果重复加锁就会造成死锁 当前进程也会进入休眠
    [countLock unlock];
    [countLock tryLock];//尝试获得锁 如果可以则返回YES 如果不能并不会进入休眠 而是直接返回NO 并且继续执行下面的代码 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    NSConditionLock 条件锁

    就是这个锁在初始化的时候会设置一个condition值 这个就相当于密码 只有你在调用这个锁的时候带着相同的condition才能使用锁

    -(id)initWithCondition:(NSInteger)condition 初始化

    -(NSInteger)condition 返回锁中设定的值

    -(void)lockWhenCondition:(NSInteger)condition

    如果锁在使用:则线程进入休眠
    如果锁不在使用 :
    1.如果这个condition值和锁的condition值一样 则可以使用这个锁 就是正常的使用锁
    2.如果condition不一致 则进入休眠

    -(void)unlockWithCondition:(NSInteger)condition

    这个没懂 是只有值相同的才能解锁吗 还是什么意思

    -(BOOL)tryLockWithCondition:(NSInteger)condition

    一样 就是加个条件 值要一样

    NSRecursiveLock 拥有锁的线程重复获得锁也不会休眠

    //主要是避免这个情况
    NSLock*countLock = [[NSLock alloc]init];
    [countLock lock];
    [countLock lock];//注意 如果重复加锁就会造成死锁 当前进程也会进入休眠
    
    //这样就不会
    NSRecursiveLock*countLock = [[NSRecursiveLock alloc]init];
    [countLock lock];
    [countLock lock];//同样 此时其他进程是没办法获得这个锁的 会进入休眠 唯一缺点可能就是性能没那么好
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    @ synchronized(没咋看)

    @synchronized(obj)
    {
    	//记述想要排斥的内容
    }
    
    • 1
    • 2
    • 3
    • 4

    运行时会自动创建执行该段代码块的锁(mutex)
    obj通常指定为该互斥锁要保护的对象 obj自己不需要是锁的对象

    同一个obj的@synchronized块如果有多个 则不可以同时执行

  • 相关阅读:
    SOA:整车架构下一代的升级方向
    13.(vue3.x+vite)组件间通信方式之provide与inject
    手机电脑scoket通信 手机软件 APP inventor 服务端程序python
    kernel驱动配置文件的编写的记录
    word中给公式加序号的方法
    Tomcat 下部署 jFinal
    【笔记】开发项目验收审核总结
    【夜读】让自己更幸福的8件小事
    VS2022中ArcGIS Pro SDK for .NET安装和卸载指南
    工业智能网关BL110应用之三十二: 如何连接配置阿里云服务器
  • 原文地址:https://blog.csdn.net/qq_43535469/article/details/126503227