Mac操做线程的接口

参考Cocoa文档Threading Programming Guide多线程

1,建立线程的方式分布式

  • NSThread
    • 直接建立线程的接口 + (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument。
    • Create a new NSThread object and call its start method或者Override NSThread's main method using subclassing。
    • 若是有了NSThread的Obj,能够使用NSOject的performSelector:onThread:withObject:waitUntilDone:方法执行任务,但前提的这个Thread必须有RunLoop。
  • POSIX API
    • pthread_create
  • NSObject
    • performSelectorInBackground:withObject:

2,线程同步的工具ide

  • 原子操做

    优势是不会阻塞线程执行,性能好。缺点是只能对简单的数据类型使用。工具

    能够使用锁来保护一段代码的关键区,在同一时间只能有一个线程进入关键区,一般关键区在操做一些多线程共享的资源。oop

    • 互斥锁(mutex)
      • NSLock 两个有用的方法:trylock lockBeforeDate
      • @synchronized(obj)性能

    • 递归锁(recursive lock)同一个线程能够获取屡次,但只有当锁为0时另一个线程才能得到。
      • NSRecursiveLock
    • 读写锁(read-write lock)当读操做不少但写操做不多的能提升性能。只在POSIX线程中支持。
    • 分布式锁(distributed lock)进程级别的锁,只报告状态,不阻塞进程。
      • NSDistributedLock 使用文件系统实现。
    • 条件锁(NSConditionLock)
  • 条件

    条件是一种特别的锁,它用来保证操做执行的顺序ui

        [cocoaCondition lock];
        while (timeToDoWork <= 0)
        [cocoaCondition wait];
        timeToDoWork--;
        // Do real work here.
        [cocoaCondition unlock];            
        [cocoaCondition lock];
        timeToDoWork++;
        [cocoaCondition signal];
        [cocoaCondition unlock];
相关文章
相关标签/搜索