Следующий код компилируется и работает на стандартном Linux:
#include <iostream>
#include <pthread.h>
using namespace std;
class Foo
{
public:
Foo();
void go_thread();
void stop_thread();
private:
static void* worker( void* param );
pthread_t m_pt;
};
Foo::Foo()
{
m_pt = 0;
}
void Foo::go_thread()
{
int success = pthread_create( &m_pt, NULL, worker, static_cast<void*>(this) );
if( success == 0 )
{
cout << "thread started" << endl;
}
}
void Foo::stop_thread()
{
int success = pthread_join( m_pt, NULL );
if( success == 0 )
{
cout << "thread stopped" << endl;
}
}
void* Foo::worker( void* p )
{
cout << "thread running" << endl;
return 0;
}
int main()
{
Foo f;
f.go_thread();
f.stop_thread();
return 0;
}
и выдает следующий вывод:
$ ./a.out
thread started
thread running
thread stopped
$
Этот код также собирается с Android NDK (r5b). Тем не менее, когда я отправляю полученный исполняемый файл на устройство и запускаю его, я получаю SIGSEGV до того, как main () запустится. Я выделил проблему до pthread_create()
. Кажется, простое существование этого вызова в моем коде, не говоря уже о выполнении, заставляет мою прогу вызывать ошибку. Есть идеи?