zoukankan      html  css  js  c++  java
  • @synchronized 再考察

    核心是:将标示对象与锁建立关联。

    线程

    标识;

    异常;

    NSString *test = @"test";

    @try {
        // Allocates a lock for test and locks it
        objc_sync_enter(test);
        test = nil;
    } @finally {
        // Passed `nil`, so the lock allocated in `objc_sync_enter`
        // above is never unlocked or deallocated
        objc_sync_exit(test);   
    }
     

    int objc_sync_enter(id obj)

    {

        int result = OBJC_SYNC_SUCCESS;

        if (obj) {

            SyncData* data = id2data(obj, ACQUIRE);

            require_action_string(data != NULL, done, result = OBJC_SYNC_NOT_INITIALIZED, "id2data failed");

            result = recursive_mutex_lock(&data->mutex);

            require_noerr_string(result, done, "mutex_lock failed");

        } else {

            // @synchronized(nil) does nothing

            if (DebugNilSync) {

                _objc_inform("NIL SYNC DEBUG: @synchronized(nil); set a breakpoint on objc_sync_nil to debug");

            }

            objc_sync_nil();

        }

    done: 

        return result;

    }

    // End synchronizing on 'obj'. 

    // Returns OBJC_SYNC_SUCCESS or OBJC_SYNC_NOT_OWNING_THREAD_ERROR

    int objc_sync_exit(id obj)

    {

        int result = OBJC_SYNC_SUCCESS;

        

        if (obj) {

            SyncData* data = id2data(obj, RELEASE); 

            require_action_string(data != NULL, done, result = OBJC_SYNC_NOT_OWNING_THREAD_ERROR, "id2data failed");

            

            result = recursive_mutex_unlock(&data->mutex);

            require_noerr_string(result, done, "mutex_unlock failed");

        } else {

            // @synchronized(nil) does nothing

        }

  • 相关阅读:
    东北育才 第1天
    东北育才 第0天
    BZOJ 3894 文理分科
    BZOJ 1001 [BeiJing2006]狼抓兔子
    POJ 2785 4 Values whose Sum is 0(暴力枚举的优化策略)
    UVA 1605 Building for UN(思维)
    统计频率(map映照容器的使用)
    POJ 1007 DNA Sorting(sort函数的使用)
    POJ 1002 487-3279(map映照容器的使用)
    BFS算法(——模板习题与总结)
  • 原文地址:https://www.cnblogs.com/feng9exe/p/8567783.html
Copyright © 2011-2022 走看看