因爲在以前的開發中實在是很少會用到多線程的知識,但是現在手中的項目是做視頻開發。
而在視頻開發類項目中,最困難的就是邏輯和多線程處理,這幾天沒事研究了一下線程鎖,我覺的一個簡答的代碼實例,就能體現出
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;