2014-04-14 8 views
2

내가 갖는 아주 이상한 충돌 충돌 : 아이폰 OS 6 4S의 시간의코 루틴 호출

그들은 같은 장소에서 발생
Exception Type: EXC_BAD_ACCESS (SIGABRT) 
Exception Codes: KERN_INVALID_ADDRESS at 0x00000004 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x3b1cc350 __pthread_kill + 8 
1 libsystem_c.dylib    0x3b14311e pthread_kill + 54 
2 libsystem_c.dylib    0x3b17f96e abort + 90 
3 _example      0x0161cd74 mono_handle_native_sigsegv + 312 
4 _example      0x0160c6e4 mono_sigsegv_signal_handler + 256 
5 libsystem_c.dylib    0x3b14ce90 _sigtramp + 40 
6 _example      0x01707114 g_hash_table_lookup_extended + 172 
7 _example      0x01707154 g_hash_table_lookup + 20 
8 _example      0x016a3144 mono_metadata_parse_type_full + 636 
9 _example      0x016a2e70 mono_metadata_parse_generic_inst + 88 
10 _example      0x016a34bc do_mono_metadata_parse_type + 768 
11 _example      0x016a3abc mono_type_create_from_typespec + 216 
12 _example      0x0164ee70 mono_type_retrieve_from_typespec + 32 
13 _example      0x016464bc mono_class_get_full + 208 
14 _example      0x01677fc4 method_from_memberref + 276 
15 _example      0x016774a4 mono_get_method_from_token + 688 
16 _example      0x01677140 mono_get_method_full + 176 
17 _example      0x01677754 mono_get_method + 12 
18 _example      0x01613554 decode_patch + 412 
19 _example      0x016161f8 mono_aot_plt_resolve + 244 
20 _example      0x0161e518 mono_aot_plt_trampoline + 32 
21 _example      0x00dd33d8 generic_trampoline_6 + 120 
22 _example      0x0124b0a8 scripting_method_invoke(ScriptingMethod*, MonoObject*, ScriptingArguments&, MonoException**) (ScriptingBackendApi_Mono.cpp:180) 
23 _example      0x012ceed0 ScriptingInvocation::Invoke(MonoException**, bool) (ScriptingInvocation.cpp:113) 
24 _example      0x012cee9c ScriptingInvocation::Invoke(MonoException**) (ScriptingInvocation.cpp:98) 
25 _example      0x012cee48 bool ScriptingInvocation::Invoke<bool>(MonoException**) (ScriptingInvocation.cpp:72) 
26 _example      0x012b2548 Coroutine::InvokeMoveNext(MonoException**) (Coroutine.cpp:180) 
27 _example      0x012b229c Coroutine::Run() (Coroutine.cpp:205) 
28 _example      0x012c4f6c MonoBehaviour::CreateCoroutine(MonoObject*, ScriptingMethod*) (MonoBehaviour.cpp:786) 
29 _example      0x012c51f0 MonoBehaviour::StartCoroutineManaged2(MonoObject*) (MonoBehaviour.cpp:824) 
30 _example      0x0144f89c MonoBehaviour_CUSTOM_StartCoroutine_Auto(ReadOnlyScriptingObjectOfType<MonoBehaviour>, MonoObject*) (UnityEngineMonoBehaviour.cpp:78) 
31 _example      0x00b6745c m_UnityEngine_MonoBehaviour_StartCoroutine_System_Collections_IEnumerator + 40 

약 20 %를,하지만 난 아이폰을 재현 할 수 없습니다 정확히 충돌 않는 경우 심지어 이해하지

IEnumerator SomeCoroutine(System.Action<bool> _Success) 
{ 
    #if UNITY_IPHONE 
    NativeObjectiveCMethod(); 
    #elif UNITY_ANDROID 
    // ... something else, not relevant here 
    #endif 
    while(m_PrivateFieldSetInOtherThread == null) 
    { 
     yield return null; 
    } 

    if (_Success != null) 
    { 
     _Success(m_PrivateFieldSetInOtherThread.Value); 
    } 
    m_PrivateFieldSetInOtherThread = null; 

} 

: 아이폰 OS 7. 코드에서

5는, 내가 이렇게 보이는 코 루틴을 호출하는 것을 시도하고있다.

설명 :이 필드는 원래 수준의 타사 API에서 호출되었으므로 다른 스레드에서 설정됩니다.

답변

3

Unity의 ApI는 이 아니고 스레드 안전이므로 다른 스레드에서 사용할 수 없습니다. Unity는 또한 다른 스레드에서 스레드를 사용하지 못하도록 스레드 검사를 구현했습니다.