美文网首页移动开发
iOS锁-@synchronized

iOS锁-@synchronized

作者: 口子窖 | 来源:发表于2018-07-13 11:25 被阅读4次

@synchronized

先上例子

#import <Foundation/Foundation.h>
@interface NSLockTest : NSObject
- (void)forTest;
@end
#import "NSLockTest.h"
@interface NSLockTest()
@property (nonatomic,strong) NSArray *tickets;
@property (nonatomic,assign) int soldCount;
@end
@implementation NSLockTest
- (void)forTest
{
    self.tickets = @[@"南京-北京A101",@"南京-北京A102",@"南京-北京A103",@"南京-北京A104",@"南京-北京A105",@"南京-北京A106",@"南京-北京A107",@"南京-北京A108",@"南京-北京A109",@"南京-北京A110",@"南京-北京A111",@"南京-北京A112",@"南京-北京A113",@"南京-北京A114",@"南京-北京A115",@"南京-北京A116",@"南京-北京A117",@"南京-北京A118",@"南京-北京A119",@"南京-北京A120",@"南京-北京A121",@"南京-北京A122",@"南京-北京A123",@"南京-北京A124",@"南京-北京A125",@"南京-北京A126",@"南京-北京A127",@"南京-北京A128",@"南京-北京A129",@"南京-北京A130"];
    //第一窗口
    NSThread *windowOne = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];
    windowOne.name = @"一号窗口";
    [windowOne start];
    //第二窗口
    NSThread *windowTwo = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];
    windowTwo.name = @"二号窗口";
    [windowTwo start];
    //第三窗口
    NSThread *windowThree = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];
    windowThree.name = @"三号窗口";
    [windowThree start];
    //第四窗口
    NSThread *windowFour = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];
    windowFour.name = @"四号窗口";
    [windowFour start];
}
-(void)soldTicket
{
    @synchronized (self) {
        if (self.soldCount == self.tickets.count) {
            NSLog(@"=====%@ 剩余票数:%lu",[[NSThread currentThread] name],self.tickets.count-self.soldCount);
            return;
        }
        //延时卖票
        [NSThread sleepForTimeInterval:0.2];
        self.soldCount++;
        NSLog(@"=====%@ %@ 剩%lu",[[NSThread currentThread] name],self.tickets[self.soldCount-1],self.tickets.count-self.soldCount);
        
    }
    //一直卖票
    [self soldTicket];
}
@end

注意

1、本质上@synchronized应该是一个互斥锁

2、据说比较耗时,这个没有统计过

3、@synchronized (锁住的对象) {代码块}

4、重复加锁无额外效果

5、@synchronized (nil) {代码块},不会起任何作用。

相关文章

  • 线程锁

    iOS中有几种线程锁:@synchronized、NSLock以及NSRecursiveLock(递归锁)。本文用...

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • iOS都有哪些锁

    iOS都有哪些锁:synchronized 、atomic、oSSpinLook、NSLock、dispatch_...

  • iOS 锁

    iOS Lock(锁) 主要介绍常见的锁,以及synchronized、NSLock、递归锁、条件锁的底层分析 借...

  • ios 线程锁

    ios多线程之线程锁 1.@synchronized的用法 @synchronized(self)的用法: @sy...

  • OC-锁的介绍及简单使用

    1、@synchronized @synchronized是 iOS 中最常见的锁,用法很简单: 在线程 1 内容...

  • iOS中锁的分析

    iOS中锁的分析 ** @synchronized ** 递归互斥锁 // objc_sync_enter loc...

  • iOS锁-@synchronized

    @synchronized 先上例子 注意 1、本质上@synchronized应该是一个互斥锁 2、据说比较耗时...

  • iOS开发中常用的锁

    锁是线程编程同步工具的基础,在iOS开发中常用的锁有以下几种: @synchronized NSLock 对象锁 ...

  • 多线程中的锁

    ios中锁的种类 NSLock synchronized 关键字 pthread_mutex_t dispatch...

网友评论

    本文标题:iOS锁-@synchronized

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