배열 객체가 sharedArray
이고 생성 속도가 느립니다. 나는 먼저 그것들을 만들고 그것들을 배열에 동시에 삽입한다. 그 후 일부 독자는이 sharedArray
에 동시에 액세스하여 객체를 가져 와서 독자적인 방식으로 처리합니다. 공유 리소스에 올바르게 액세스하지 않아서 발생하는 것으로 예상되는 충돌이 발생했습니다. 내가 잘못하고 있니?CGD에서 공유 리소스에 액세스하기위한 공통 큐
iOS 대상 배포 버전 5.1과 함께 ARC를 사용하고 있습니다. 리소스 (코드에 표시된)를 설정할 때 EXC_BAD_ACCESS
오류가 발생합니다.
대단히 감사합니다!
//Creation of the array
dispatch_queue_t constructionQueue = dispatch_queue_create("constructionQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_apply(numberOfSlowObjects, constructionQueue, ^(size_t i) {
__block SlowObject *slowOb = [[SlowObject alloc] init];
dispatch_sync(dispatch_get_main_queue(), ^{
[sharedArray setObject:slowOb atIndexedSubscript:i]; //HERE I GET THE ERROR
});
});
dispatch_release(constructionQueue);
//Accessing the array from the different readers
dispatch_queue_t readersQueue = dispatch_queue_create("readersQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_apply(readers.count, readersQueue, ^(size_t i) {
Reader *reader = [readers objectAtIndex:i];
dispatch_queue_t processQueue = dispatch_queue_create("processQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_apply(numberOfSlowObjects, processQueue, ^(size_t j) {
__block SlowObject *slowOb;
dispatch_sync(dispatch_get_main_queue(), ^{
slowOb = [sharedArray objectAtIndex:j];
});
[reader process:slowOb];
});
dispatch_release(processQueue);
});
dispatch_release(readersQueue);
그리고 sharedArray
(공유 자원) 게으른 초기화 코드 :
- (NSMutableArray *) sharedArray
{
if(!_sharedArray){
_sharedArray = [[NSMutableArray alloc] initWithCapacity:numberOfSlowObjects];
for(int i=0;i<numberOfSlowObjects;i++) [_sharedArray addObject:[NSNumber numberWithInt:0]]; //null initialization;
}
return _sharedArray;
}
이 오류가 발생하면 어떤 메시지가 나타 납니까? – Sven
이 줄에 위의 오류가 표시됩니다. slowOb = [sharedArray objectAtIndex : j] ;? 코드에 표시하십시오. –
모든 것을 동시에 실행하고 있으므로 모든 것이 올바르게 작동하는지 확인하기 위해 일부 NSLog를 넣어야합니다. 예를 들어 numberOfSlowObjects에 대한 NSLog는 값이 할당되고 J에 할당되도록합니다. 그런 다음 sharedArray에 액세스 할 때까지 아무것도 있는지 확인해야합니다. –