Deadlock2 GCD에서 의도치 않은 교착상태를 피하는 법 print("hi \(Thread.current)") // 1 DispatchQueue.global().sync { print("hi \(Thread.current)") // 2 } DispatchQueue.global().async { print("hi \(Thread.current)") // 3 } // 1 - hi {number = 1, name = main} // 2 - hi {number = 1, name = main} // 3 - hi {number = 4, name = (null)} 1번 부분을 보면 메인 스레드에서 실행되고 있음을 알 수 있습니다. 원래 특별한 설정 없는 모든 코드는 메인스레드 위에서 돌아갑니다. 그럼 2번 부분은 왜 메인 스레드에서 처리될까요? 논리적으로는 메인 스레드를 .. 2021. 12. 22. DispatchQueue 교착상태 Deadlock(교착상태)는 깜직하게도 EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)라는 오류를 만들어 앱을 터트립니다. 교착상태를 막아야겠죠? 이런 교착상태가 일어나는 상황을 직렬 큐일 때, 동시 큐일 때로 나누어보면, 1. Serial(직렬) Queue - async 속 sync DispatchQueue.main.async { // main queue == serial DispatchQueue.main.sync { // 교착상황!! } } 해결법 : 다른 큐에서 async로 사용하세요. sync로 하면 교착상태가 또 나니까 주의하세유 -> 참조 : https://gogo-ios.tistory.com/46 DispatchQueue.global().as.. 2021. 12. 22. 이전 1 다음