zoukankan      html  css  js  c++  java
  • [IOS笔记] 关于线程[2]

    Using a POSIX Mutex Lock 

    c语言方法

    pthread_mutex_t mutex;
    void MyInitFunction()
    {
        pthread_mutex_init(&mutex, NULL);
    }
     
    void MyLockingFunction()
    {
        pthread_mutex_lock(&mutex);
        // Do work.
        pthread_mutex_unlock(&mutex);
    }

    Using the NSLock Class

    BOOL moreToDo = YES;
    NSLock *theLock = [[NSLock alloc] init];
    ...
    while (moreToDo) {
        /* Do another increment of calculation */
        /* until there’s no more to do. */
        if ([theLock tryLock]) {
            /* Update display used by all threads. */
            [theLock unlock];
        }
    }

    Using the @synchronized Directive

    - (void)myMethod:(id)anObj
    {
        @synchronized(anObj)
        {
            // Everything between the braces is protected by the @synchronized directive.
        }
    }

    Using an NSConditionLock Object

    id condLock = [[NSConditionLock alloc] initWithCondition:NO_DATA];
     
    while(true)
    {
        [condLock lock];
        /* Add data to the queue. */
        [condLock unlockWithCondition:HAS_DATA];
    }
    
    while (true)
    {
        [condLock lockWhenCondition:HAS_DATA];
        /* Remove data from the queue. */
        [condLock unlockWithCondition:(isEmpty ? NO_DATA : HAS_DATA)];
     
        // Process the data locally.
    }

    Using an NSRecursiveLock Object

    一般在递归函数中使用,how many times lock, how many times unlock

    NSRecursiveLock *theLock = [[NSRecursiveLock alloc] init];
     
    void MyRecursiveFunction(int value)
    {
        [theLock lock];
        if (value != 0)
        {
            --value;
            MyRecursiveFunction(value);
        }
        [theLock unlock];
    }
     
    MyRecursiveFunction(5);

    Using an NSDistributedLock Object

    NSDistributedLock

    进程之间的资源锁定,锁本身一般放在file system中,以便所有程序访问

    Using the NSCondition Class

    - (void) method1
    {
        [[cocoaCondition lock] lock];
        while (!someCheckIsTrue) {
            [cocoaCondition wait]; //线程锁定,lock解锁,接收到信号之后再次锁定
        }
        // Do something.
        [cocoaCondition unlock];
    }
    
    - (void) method2
    {
        [cocoaCondition lock];
        // Do something.
        someCheckIsTrue = YES;
        [cocoaCondition signal]; //发送信号
        [cocoaCondition unlock]; //解锁
    }

    Using POSIX Conditions

    pthread_mutex_t mutex;
    pthread_cond_t condition;
    Boolean     ready_to_go = true;
     
    void MyCondInitFunction()
    {
        pthread_mutex_init(&mutex);
        pthread_cond_init(&condition, NULL);
    }
     
    void MyWaitOnConditionFunction()
    {
        // Lock the mutex.
        pthread_mutex_lock(&mutex);
     
        // If the predicate is already set, then the while loop is bypassed;
        // otherwise, the thread sleeps until the predicate is set.
        while(ready_to_go == false)
        {
            pthread_cond_wait(&condition, &mutex);
        }
     
        // Do work. (The mutex should stay locked.)
     
        // Reset the predicate and release the mutex.
        ready_to_go = false;
        pthread_mutex_unlock(&mutex);
    }
    
    
    void SignalThreadUsingCondition()
    {
        // At this point, there should be work for the other thread to do.
        pthread_mutex_lock(&mutex);
        ready_to_go = true;
     
        // Signal the other thread to begin work.
        pthread_cond_signal(&condition);
     
        pthread_mutex_unlock(&mutex);
    }
  • 相关阅读:
    GIT的使用及心得
    XCODE的演变及使用经验分享
    软件工程学习计划
    这只是一个测试,注意,这只是一个测试
    软工实践---个人
    调研Android开发环境的发展演变
    软件工程的实践项目的自我目标
    调研ANDRIOD平台的开发环境的发展演变
    软件工程的实践项目的自我目标
    Leetcode题库——39.组合总和
  • 原文地址:https://www.cnblogs.com/zengyou/p/2767567.html
Copyright © 2011-2022 走看看