搜尋

首頁  >  問答  >  主體

objective-c - 線程同步和非同步的區別? IOS中如何實現多執行緒的同步?

這個關於線程的問題怎麼實現?

PHP中文网PHP中文网2829 天前544

全部回覆(3)我來回復

  • 高洛峰

    高洛峰2017-04-28 09:07:18

    我說一下我自己的理解啊,理解不深,說錯的地方還請指正。

    執行緒同步是在多執行緒下才會產生的,多個執行緒同時存取同一塊資源,為了安全且有效率的訪問,就要解決同步存取帶來的一系列問題。
    打個比方,兩個人從一個籃子裡拿蘋果,如果一個拿完之後再讓另一個拿,那就不會出現問題,可是效率也不高。 (totalTime = timeOfA + timeOfB)
    如果讓他們同時拿,你拿一個我拿一個,這樣效率就高了,可是會出現問題,兩個人都搶到一個蘋果那該歸誰呢,這時可以有幾個方法,A拿蘋果時B先等著,等A拿到了B在拿。或A只能拿A這邊的,B只能拿B這邊的。這樣就能解決問題了。
    在iOS上最主要的方法就是在訪問期間加鎖,等到訪問完畢在解鎖。至於加什麼鎖怎麼加鎖,網路上很多資料講的都蠻詳細的。

    回覆
    0
  • 为情所困

    为情所困2017-04-28 09:07:18

    同步 异步 线程同步,是不同的概念

    接樓上同學的例子

    你拿一個蘋果,然後我拿一個蘋果, 這叫同步执行
    你和我同时去拿苹果,这叫两个线程异步执行,这里为了实现异步,使用了多线程的手段,你和我各属于一个线程
    然后就会出现问题了,如果你和我伸手拿了同一个苹果怎么办? 这个时候就需要你和我进行线程同步,比如:誰先看到籃子,就對籃子加鎖,讓另一個人等著,拿完之後解鎖

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-28 09:07:18

    很多人覺得異步就是多線程,這個是不對的,異步和多線程有區別的。

    線程是程式碼啊,CPU要跑的程式碼啊,兩段線程程式碼一起跑給人一種沒有阻塞的感覺。但這還是代碼。 CPU還是在那裡等著。

    非同步主要針對io來說,檔案的io,網路請求的io,你不想讓同步的io阻塞了進程,所以才有非同步方式提高回應能力,非同步要去作業系統訂閱事件委託閉包函數,和多線程是不能說一樣的。

    如果你懂一點硬件,你可以感受一下中斷。

    拿大家說的蘋果舉個例子…
    異步是,你告訴電腦,給我拿個蘋果吧。
    電腦就讓自己會拿蘋果的硬體去回應這個功能啦。跟CPU還有關係麼?沒了啦。就不耽誤CPU的事情啦。
    蘋果是網路請求的時候,拿蘋果的就是網卡

    回覆
    0
  • 取消回覆