tôi nhận được một số nghi ngờ về hành vi của mã này:dispatch_sync gọi thành một cuộc gọi dispatch_async
dispatch_async(queue, ^{
sleep(2);
NSLog(@"step1");
dispatch_sync(queue, ^{
sleep(3);
NSLog(@"step 2");
});
NSLog(@"step 3");
});
Từ những hàng tôi mong đợi để có được như đầu ra step1 -> step3 -> step2
nhưng tôi có được chỉ step1
.
Nếu tôi thay đổi dispatch_sync bằng dispatch_async nó hoạt động như dự kiến, dispatch_sync có thành một cuộc gọi dispatch_async tạo ra loại sự cố này không?
Chỉnh sửa sau khi câu trả lời ----------------
Trường hợp này tạo ra một bế tắc:
Bạn có thể kiểm tra câu trả lời chấp nhận để có giải thích về tình trạng này và kiểm tra liên kết này để biết tài liệu http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_async.3.html