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];
相關文章
相關標籤/搜索