C++ OSX pthreads:cthread\u set\u errno\u self segfault

C++ OSX pthreads:cthread\u set\u errno\u self segfault,c++,macos,pthreads,segmentation-fault,C++,Macos,Pthreads,Segmentation Fault,我时不时地遇到一个小问题,在创建新线程后,我的程序立即出现故障 新线程具有如下回溯: Thread 24 Crashed: 0 libsystem_c.dylib 0x00007fff8ea3c358 _spin_lock$VARIANT$mp + 8 1 libsystem_c.dylib 0x00007fff8e9e9f25 _pthread_exit + 55 2 libsystem_c.dylib

我时不时地遇到一个小问题,在创建新线程后,我的程序立即出现故障

新线程具有如下回溯:

Thread 24 Crashed:
0   libsystem_c.dylib                   0x00007fff8ea3c358 _spin_lock$VARIANT$mp + 8
1   libsystem_c.dylib                   0x00007fff8e9e9f25 _pthread_exit + 55
2   libsystem_c.dylib                   0x00007fff8e9ea27d pthread_exit + 30
3   libsystem_c.dylib                   0x00007fff8e9a022b cthread_set_errno_self + 76
4   libsystem_kernel.dylib              0x00007fff87cd701d cerror + 33
5   libsystem_c.dylib                   0x00007fff8e9e88bf _pthread_start + 335
6   libsystem_c.dylib                   0x00007fff8e9ebb75 thread_start + 13
崩溃时CPU的状态如下:

Thread 24 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000000  rbx: 0x0000000000000001  rcx: 0x00007fff87cd55ba  rdx: 0x00000000ffffffff
  rdi: 0x0000000101f0e010  rsi: 0x0000000000000001  rbp: 0x0000000101f0de70  rsp: 0x0000000101f0de08
   r8: 0x0000000101f0e010   r9: 0x0000000000000001  r10: 0x00007fff87cd5ca6  r11: 0x0000000000000202
  r12: 0x0000000000000032  r13: 0x0000000101f0e000  r14: 0x0000000101f0e000  r15: 0x0000000007010101
  rip: 0x00007fff8ea3c358  rfl: 0x0000000000010286  cr2: 0x0000000101f0e010
Logical CPU: 0
cr2
==
rdi
r8
;没有看到这些的实际代码,我只能冒险猜测为什么这个地址无效

这似乎是
errno
中的一个问题,哪个(AFAIK)是线程本地存储


这是否可能是由于程序中其他地方的堆或其他内存损坏造成的?这个特殊的问题非常难以重现,但如果可能的话,最好能解决这个问题。

经过研究,这个特殊的问题似乎源于线程被取消。我不完全确定为什么取消线程会导致它像这样崩溃。。。但是,也许pthread_destroy()已经被调用了,或者在这期间发生了什么事情。为什么不显示源代码呢?