Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Threads во FreeBSD


Автор: Spalax 16.5.2006, 08:19
Такая проблема немогу создать thread вылетает по ошибке segmentation foult
Притом не могу понять почему не работает функция pthread_init(); и функции из той же серии 

Автор: gruy 16.5.2006, 10:29
Код покажи. 

Автор: Spalax 17.5.2006, 23:35
Код

void *th(void *);
int main (int argc,char **argv) {
pthread_t tid;
pthread_create(&tid,NULL,th,NULL);
}

void *th (void *arg) {
   cout << "Thread started \n";
}


При вызове пишет что я неправильную память читаю ... ну вообщем SIGSEGV (11) Segmentation foult   

Автор: Pulse69 18.5.2006, 04:16
Попробуй скомпилить с ключом  -lpthread
 

Автор: GrayCardinal 18.5.2006, 08:37
Хм. У меня на лине процесс просто дохнет. Только я на printf поменял, но не важно. printf не успевает выполниться. После pthread_join - все ОК. Что логично. В общем - действительно ли он от pthread_create выдает SIGSEGV ?

может стоит
Код

void *th(void *);
int main (int argc,char **argv) {
pthread_t tid;
if (pthread_create(&tid,NULL,th,NULL) < 0) {
  perror ("pthread");
}
printf ("OK");
fflush (stdout);
}

void *th (void *arg) {
   cout << "Thread started \n";
}


Если не поможет, то у вас видимо libc дохлый (левая сборка ?). 
  

Автор: gruy 18.5.2006, 09:29
Цитата(Spalax @  17.5.2006,  23:35 Найти цитируемый пост)
При вызове пишет что я неправильную память читаю ... ну вообщем SIGSEGV (11) Segmentation foult

Через dbg прогонял? На чем именно валится?

А так твой пример у меня работает. Правда чтобы увидеть результат потока, пришлось добавить после создания потока pthread_join(tid, NULL), иначе он просто не успевал выполнится  smile  

Автор: Spalax 18.5.2006, 09:55
Всем спасиба проблема решилась таким образум 

Код

#include <pthread.h>
#include <string>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

void *th(void *);
int main (int argc,char **argv) {
pthread_t tid;
if (pthread_create(&tid,NULL,th,NULL) < 0) {
   cout << "Error \n";
}
pthread_join(tid, NULL);
printf ("OK");
fflush (stdout);
}
void *th (void *arg) {
   cout << "Hello\n";
   exit(0);
}

а скомпилил вот так 
g++ -pthread -o thread threads.cpp 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)