ios多線程學習之GCD線程鎖

因爲在以前的開發中實在是很少會用到多線程的知識,但是現在手中的項目是做視頻開發。

而在視頻開發類項目中,最困難的就是邏輯和多線程處理,這幾天沒事研究了一下線程鎖,我覺的一個簡答的代碼實例,就能體現出

GCD 線程鎖的特徵


還是先了解一點,在GCD 中實現鎖的操作是通過線程隊列來實現的


首先是一段沒有鎖操作的簡單線程處理

   

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

        

        while (bstart)

        {

                

                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{


                for (NSInteger i=0; i<50; i++)

                {

                    

                    NSLog(@"%ld",(long)i);

                }

             

                  });

            usleep(100*1000);

        }

        

    });


可以觀察這一段代碼的輸出結果數字並不一定是從0。。。50

而是在中間可能會亂序。

因爲我是在while循環中開了一個線程,然後在下次循環的時候又開了一個線程,這樣兩個線程都在執行輸出,這樣就會分不清時序,導致線程混亂


下面是加入對列隊的線程


    dispatch_queue_t queue =dispatch_queue_create("queue",DISPATCH_QUEUE_SERIAL);

  

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

        

        while (bstart) {

            

                dispatch_async(queue, ^{

            


                for (NSInteger i=0; i<50; i++)

                {

                    

                    NSLog(@"%ld",(long)i);

                }

                


            });


            usleep(100*1000);

        }

        

    });

    

觀察這個輸處,由於所有while 循環開的線程都是隊列線程,難麼就會按隊列先後順序執行,這樣的打印輸出就全部是0。。。50;




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章