gist.githubのコードを貼るテスト。ついでに、pthreadのあるスレッドのスタック領域を全部使い切るとどうなるかというと、
EXC_BAD_ACCESS/KERN_INVALID_ADDRESS - スレッドがマップされていないメモリにアクセスすることで引き起こされます。データアクセスまたは命令フェッチが引き金になります。この違いを見分ける方法については、後のセクションで説明します。
こういう目に遭います。あとは、テンプレート関数をpthread_createにそのまま入れたのではダメで、一度どこかで関数ポインタか何かに突っ込んで具象化(だっけ?)しておかないとそもそもコンパイルすらできないという孔明の罠。
ふっと別件でプログラミングから頭を離したらいたらできるようになっていたので、ずーっとダイブばかりしていてもget stuckしちゃうだけだよ、と痛感した。
以下、コード。
大したことないけど、test_threadの一行目でスタック領域を大量に消費しているところがポイントと思われる。
ちゃんと調べるんなら、pthread_createするときにattributeを指定して、そのattributeにpthread_attribute_setstacksize(3)でスタックサイズを指定、なんてやれば動くようになるはず。
いや、そもそも素直にmalloc/new使えという話なんだけどね。