マルチスレッドのアプリケーションでこの問題に直面しています。
メインスレッドは、内部でメモリ割り当てを行っている別のスレッドを生成します。
//Main thread
if(p) {
Thread th1(TestFunc, 0);
}
//TestFunc in thread.
unsigned long TestFunc (void * param)
{
//Do some memory allocation.
}
両方のスレッドがお互いを待っているようです。
メイン スレッドのコールスタックは次のとおりです。
_OSSpinLockLockSlow
GMFree
operator delete (void *)
Thread:: ~Thread ()
Thread:: ~Thread ()
生成されたスレッドの場合
_OSSpinLockLockSlow
GMmalloc_zone_malloc_internal
問題のサンプルコードです。
メインスレッドと生成されたスレッドの両方がお互いを待っているようです。
この _OSSpinLockLockSlow の原因は何ですか?