내 프로그램은 자주 다음 줄에 (나쁜 액세스) 충돌 :NSOutputStream 스레드는 close 및 writeData 메서드에서 안전합니까?
int writeSize = [_outputStream write:pCopyOfDataBuff maxLength:sendLength];
pCopyOfDataBuff 할당 그냥 충돌 라인 전에 스택에 데이터가 가득
pCopyOfDataBuff = new unsigned char [sendLength];
입니다. Context는이 스트림을 처리하는 특수 스레드입니다.
기호 예외 브레이크 포인트를 사용하여 디버거에서 멈추었을 때 _outputStream이 실제로 이 (가)으로 닫혔습니다.
[_outputStream close];
메인 쓰레드 폐쇄 하였다. 이제 이것이 동시에 일어 났을 수 있습니다.
질문 : 다중 스레드에서 이와 같은 NSOutputStream을 처리하는 것이 안전합니까? NSStream에 대한 모든 호출을 동일한 스레드에 동기화해야합니까?
감사합니다. 문서에서 간단한 답을 찾을 수 없습니다.
알다시피, 다른 스레드의 스트림에 액세스하는 것이 안전합니다. 두 가지 디스패치 대기열을 만들고, (CFStreamCreateBoundPair를 통해) 쌍을 이루는 스트림을 만들고, 두 스트림을 열고, 대기열 A에 쓰고 대기열 B에서 읽는 빠른 테스트를 설정해야합니다. close 제 3 큐로부터의 스트림을 랜덤 시간에 출력한다. – CouchDeveloper
감사합니다. 테스트를 위해이 모든 것을 설정하는 데 너무 많은 작업이 필요한 반면, 서로 다른 스트림이 다르게 작동 할 수 있습니다 (제안 된 테스트는 일반적인 것으로 네트워킹이 필요하지 않습니다). –
실행 루프에서 스트림을 예약하는 경우 해당 스레드의 실행 루프에서만 스트림에 액세스해야합니다. 나는 그 스트림을 어떻게 미리 사용하는지 묻지 않았다는 것에 사과드립니다. – CouchDeveloper