同步佇列的死鎖問題

2021-06-26 13:51:48 字數 1143 閱讀 4745

main.m

#import #import "person.h"

int main(int argc, const char * argv)

);// nslog(@"end");

//死鎖2

//外層 在主線程佇列裡面新增乙個任務,因為是非同步,所以不用任何新增的任務執行完就可以繼續往下走,因此能夠輸出end

//裡層 用同步新增任務到主線程佇列,因此要等到新增的任務執行完才能繼續往下走,程式卡死,不能輸出sync1。

//經驗只談:永遠也不要往主線程中同步新增事件.

// nslog(@"begin");

// dispatch_async(queue, ^);

// });

// nslog(@"end");

//

// [[nsrunloop currentrunloop] run];

person *ps1 = [person shareperson];

ps1.age = 30;

person *ps2 = [person shareperson];

nslog(@"%d",ps2.age);

}return 0;

}

person.h

@inte***ce person : nsobject

@property (nonatomic, assign) int age;

+(person *)shareperson;

@end

person.m

@implementation person

static person *instace = nil;

//+(person *)shareperson

//// }

// return instace;

//}+ (person *)shareperson

); return instace;

}

CLH同步佇列

aqs內部維護著乙個fifo佇列,該佇列就是clh同步佇列。clh同步佇列是乙個fifo雙向佇列,aqs依賴它來完成同步狀態的管理,當前執行緒如果獲取同步狀態失敗時,aqs則會將當前執行緒已經等待狀態等資訊構造成乙個節點 node 並將其加入到clh同步佇列,同時會阻塞當前執行緒,當同步狀態釋放時,...

執行緒程式設計 同步佇列

我們經常會採用生產者 消費者關係的兩個執行緒來處理乙個共享緩衝區的資料。例如一 個生產者執行緒接受使用者資料放入乙個共享緩衝區裡,等待乙個消費者執行緒對資料取出處理。但是如果緩衝區的太小而生產者和消費者兩個非同步執行緒的速度不同時,容 易出現乙個執行緒等待另乙個情況。為了盡可能的縮短共享資源並以相同...

(原創)C 同步佇列

同步佇列作為乙個執行緒安全的資料共享區,經常用於執行緒之間資料讀取,比如半同步半非同步執行緒池的同步佇列。其實做起來比較簡單,要用到list 鎖和條件變數,條件變數的作用是在佇列滿了或者空了的時候等待通知。先看乙個簡單的同步佇列 include include include include inc...