2013-09-02 2 views
3

어떻게 2 개의 쓰레드간에 메시지를 전달할 수 있습니까? 예를 들어 NSThread A와 NSThread B가 있으며 스레드 A에서 스레드 B로 메시지를 전달해야합니다.객관적인 c에서 쓰레드 간 메시지 전달

스레드 A가 활성 또는 완료되었는지 확인할 수 있습니까? 그리고 활성화 된 경우 어떻게 메시지를 전달할 수 있습니다.

도움이 될 것입니다.

+2

그런데 NSThread를 사용하지 않는 것이 좋습니다. Apple의 동시성 프로그래밍 가이드 (https://developer.apple.com/library/ios/DOCUMENTATION/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html)를 읽어 보겠습니다. – mattyohe

+1

특히 "스레드로부터 마이그레이션"섹션 : https ://developer.apple.com/library/ios/DOCUMENTATION/General/Conceptual/ConcurrencyProgrammingGuide/ThreadMigration/ThreadMigration.html. mattyohe가 말했듯이, 원시'NSThread' 객체를 사용하는 것은 권장하지 않습니다. 디스패치 대기열 및 작업 대기열이 권장되는 방법입니다. –

+1

"스레드 A가 활성 또는 완료되었는지 어떻게 확인할 수 있습니까? 그리고 만약에 그때 나가 메시지를 그것에 통과 할 수있는 경우에. "이것은 경쟁 조건의보기이다. 스레드 A가 활성 상태이고 * 다음에 메시지를 보내기 전에 완료했다고 가정 해보십시오. 그런 다음 메시지를 완성 된 스레드로 보냅니다. 이제 뭐? 올바른 방법은 try * 무조건 *로 보내고 시도가 실패 할 경우 적절하게 응답하는 것입니다. –

답변

0

공유 메모리가있는 스레드간에 메시지를 전달합니다. NSThread에 메시지 전달 기능이 있는지 확실하지 않습니다. 그러나 주로 전역 변수를 사용하여 메모리를 공유합니다. 또한 객체의 공유 인스턴스를 통해 메시지를 전달할 수도 있습니다.

당신은 등 잠금을 사용하여 연구해야

1

이 작업을 수행하는 여러 가지 방법이 있습니다, 롤 - 네 - 자신의 두 시스템에 의해 제공. 으로 시작 스레드 간 통신Thread Programming Guide

+5

소개에서 시작해야합니다. "중요 사항 : 새 응용 프로그램을 개발하는 경우 동시성을 구현하기위한 대체 OS X 기술을 조사하는 것이 좋습니다." –

+1

그리고 위의 @ RobNapier의 참고 자료에있는 "스레드로부터 피하는 것"주석에 "모든 경우에 스레드에서 벗어나는 것이 가능하지 않을 수도 있습니다"라는 약간의 균형을 맞추기 위해. 어쩌면 스레드에서 마이그레이션 할 수도 있고 그렇지 않은 경우도있을 수 있습니다. 또한 협력 동시 독립 에이전트의 특정 콜렉션 중 하나가 그러한 경우 중 하나 일 수 있습니다. – CRD