dispatch_semaphore_t의 상한값을 설정할 API가 없다는 것을 깨달았습니다. 세마포어 상한값을 1로 설정할 수 있으면 좋겠다. 내가 다음 코드를 테스트 대기가 작동하지 않습니다, 아무도 나에게 dispatch_semaphore_t의 상한선을 설정하는 방법을 알려주 수 있습니까?dispatch_semaphore_t에 대한 상한 설정 방법
- (dispatch_semaphore_t)taskSemaphore {
if (!_taskSemaphore) {
_taskSemaphore = dispatch_semaphore_create(1);
}
return _taskSemaphore;
}
- (void)testMethod {
dispatch_semaphore_signal([self taskSemaphore]);
dispatch_semaphore_signal([self taskSemaphore]);
dispatch_semaphore_signal([self taskSemaphore]);
dispatch_semaphore_signal([self taskSemaphore]);
dispatch_semaphore_signal([self taskSemaphore]);
dispatch_semaphore_wait([self taskSemaphore], DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait([self taskSemaphore], DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait([self taskSemaphore], DISPATCH_TIME_FOREVER);
}
한 번에 하나씩 만 허용하려면 잠금 장치를 사용하십시오. ''NSLock lock '','pthread_mutex' (아마도 당신의 경험 수준에서는 좋지 않다), 또는 단지 직렬 디스패치 큐 (serial dispatch queue)를 포함 할 수있다. – Kevin
아니요, 요점은 아니에요, 여기에 예제를 올렸습니다. 2 ~ 3이 될 수 있습니다. – Pei
그럼 임의의 한계를 만들 방법이 없다고 확신합니다. 내가 도우미 방법을 도출 할 수있을 것이라고 확신하지만, 아마도 이것이 최선의 해결책은 아닙니다. 이것은 [XY 문제] (http://meta.stackexchange.com/a/66378/172958)처럼 들립니다. 당신이 필요로하는 최종 결과는 무엇입니까? – Kevin