Я использую C++ для реализации класса потоков. Мой код показывает следующее. У меня проблема с доступом к данным потоков. В классе Thread я создаю поток, использующий функцию pthread_create(). затем он вызывает функцию EntryPoint(), чтобы начать созданный поток. В функции «Выполнить» я хочу получить доступ к переменной маски, она всегда показывает ошибку сегмента. Итак, мой вопрос в том, копирует ли новый созданный поток данные в исходном классе? Как получить доступ к собственным данным потока?C++ multithread
class Thread {
public:
int mask;
pthread_t thread;
Thread(int);
void start();
static void * EntryPoint (void *);
void Run();
};
Thread::Thread(int a) {
mask =a;
}
void Thread::Run() {
cout<<"thread begin to run" <<endl;
cout << mask <<endl; // it always show segmentfault here
}
void * Thread::EntryPoint(void * pthis) {
cout << "entry" <<endl;
Thread *pt = (Thread *) pthis;
pt->Run();
}
void Thread::start() {
pthread_create(&thread, NULL, EntryPoint, (void *)ThreadId);
pthread_join(thread, NULL);
}
int main() {
int input_array[8]={3,1,2,5,6,8,7,4};
Thread t1(1);
t1.start();
}
Вы правы. Я должен передать это pthread_create(). Благодарю. – chnet
Следите за временем жизни объекта. См. Мой пост ниже, иначе у вас все еще будут проблемы. ;) –