美文网首页
线程互斥与同步

线程互斥与同步

作者: chsasaw | 来源:发表于2016-08-13 21:47 被阅读14次

iOS http://www.cnblogs.com/luoguoqiang1985/p/3495800.html
Android http://www.jianshu.com/p/9474d64575b0

  • 1.@synchronized对象锁
static NSObject *lockObj = nil;

if (lockObj == nil) {
    lockObj = [[NSObject alloc] init];
}
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"A thread try lock!");
    @synchronized(lockObj)  {
        NSLog(@"A thread lock, please wait!");
        [NSThread sleepForTimeInterval:10];
        NSLog(@"A thread unlock!");
    }
    
});
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"B thread try lock!");
    @synchronized(lockObj)  {
        NSLog(@"B thread lock, please wait!");
        [NSThread sleepForTimeInterval:5];
        NSLog(@"B thread unlock!");
    }
    
});
  • 2.NSLock
if (lockMain == nil) {
    lockMain = [[NSLock alloc] init];
}

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [lockMain lock];
    NSLog(@"A thread begin +!");
    [NSThread sleepForTimeInterval:10];
    NSLog(@"A thread + done and unlock!");
    [lockMain unlock];
    [lockMain lock];
    NSLog(@"A thread begin -!");
    [NSThread sleepForTimeInterval:10];
    NSLog(@"A thread - done and unlock!");
    [lockMain unlock];
});
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [lockMain lock];
    NSLog(@"B thread begin *!");
    [NSThread sleepForTimeInterval:10];
    NSLog(@"B thread * done and unlock!");
    [lockMain unlock];
    [lockMain lock];
    NSLog(@"B thread begin /!");
    [NSThread sleepForTimeInterval:10];
    NSLog(@"B thread / done and unlock!");
    [lockMain unlock];
});
  • 3.NSConditionLock条件锁

static NSConditionLock *cdtLock = nil;
#define A_THREAD  1
#define B_THREAD  2
#define C_THREAD  3

__block NSInteger a = B_THREAD;
if (cdtLock == nil) {
    cdtLock = [[NSConditionLock alloc] initWithCondition:a];
}

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"A thread run!");
    BOOL canLock = [cdtLock tryLockWhenCondition:A_THREAD];
    if (!canLock) {
        NSLog(@"A Thread Lock fail,exit!");
        return ;
    }
    NSLog(@"A thread begin lock!");
    [NSThread sleepForTimeInterval:8];
    NSLog(@"A thread unlock!");
    [cdtLock unlock];
});

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"B thread run!");
    BOOL canLock = [cdtLock tryLockWhenCondition:B_THREAD];
    if (!canLock) {
        NSLog(@"B Thread Lock fail,exit!");
        return ;
    }
    NSLog(@"B thread begin lock!");
    [NSThread sleepForTimeInterval:8];
    NSLog(@"B thread unlock!");
    [cdtLock unlock];
});

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"C thread run!");
    BOOL canLock = [cdtLock tryLockWhenCondition:C_THREAD];
    if (!canLock) {
        NSLog(@"C Thread Lock fail,exit!");
        return ;
    }
    NSLog(@"C thread begin lock!");
    [NSThread sleepForTimeInterval:8];
    NSLog(@"C thread unlock!");
    [cdtLock unlock];
});
  • 4.NSRecursiveLock递归锁
static NSRecursiveLock *lock;

 if (lock == nil) {
        lock = [[NSRecursiveLock alloc] init];
    }
    void (^__block DoLog)(int) = ^(int value){
        [lock lock];
        if (value > 0) {
            DoLog(value-1);
        }
        NSLog(@"value is %d", value);
        [lock unlock];
    };
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"test begin");
        DoLog(5);
        NSLog(@"test end");
    });

相关文章

  • OpenMP多线程——Parallel for

    多线程——线程同步 数据竞争问题 线程互斥同步——critical 线程互斥同步——atmoic 线程互斥同步——...

  • 并发与多线程

    1线程的同步与互斥。解决线程的同步与互斥 synchronied 和cas乐观锁 还有 lockcas是读取数...

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • 第13章 线程安全与锁优化

    第13章线程安全与锁优化 13.2线程安全 13.2.2线程安全的实现方法 1.互斥同步 互斥同步(Mutual ...

  • Java并发编程——信号量与互斥量

    信号量用于线程同步,互斥量用户保护资源的互斥访问。 信号量与互斥量的区别 互斥量用于线程的互斥,信号线用于线程的同...

  • 线程互斥与同步

    iOS http://www.cnblogs.com/luoguoqiang1985/p/3495800.html...

  • 线程同步与互斥

    同步方法:1、同步队列2、Dispatch Group3、NSOperation 依赖互斥1、使用同步队列2、使用...

  • 线程同步与互斥

    01概述 线程同步,是协调步调,按预定先后次序执行,解决与时间相关的错误。 线程不同步,产生的现象就是数据混乱: ...

  • 网络之美

    线程安全问题----互斥锁和递归锁 互斥锁线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制就是引入互斥锁...

  • 8.1 线程同步

    线程同步(互斥) 简介:同步(互斥)是相对于异步(并发)的概念,线程同步设计到锁的概念; 线程的两大特性:1.可见...

网友评论

      本文标题:线程互斥与同步

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