Tôi nghĩ rằng cách tốt nhất để hỏi câu hỏi này là với một số mã:Hành vi nào được đảm bảo với Grand Central Dispatch trong Objective-C?
//Main method
for(int i = 0; i < 10; i++)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self foo:i];
});
}
- (void) foo: (int) i
{
@synchronized(self)
{
NSLog(@"%d",i);
}
}
Trong trường hợp này, là nó đảm bảo rằng những con số 0-9 sẽ được in ra theo thứ tự? Có bao giờ một cơ hội mà một trong những chủ đề đang chờ đợi trên hàng đợi chạy, sẽ bị bỏ qua? Làm thế nào về trong thực tế. Thực tế, điều đó có bao giờ xảy ra không? Điều gì sẽ xảy ra nếu tôi muốn hành vi trên (vẫn sử dụng chủ đề); làm thế nào tôi có thể thực hiện điều này?
Chủ đề và khối GCD không bị "bỏ qua". Nếu một thread ném một ngoại lệ, bạn sẽ không bao giờ biết nếu không có một thử thách rõ ràng bởi vì GCD tha thứ xử lý ngoại lệ. – CodaFi