Использование pthread в C ++ - PullRequest
       26

Использование pthread в C ++

13 голосов
/ 21 апреля 2010

Я использую pthread.h в файле *.cc. когда я пытаюсь использовать pthread_exit(0); или pthread_join(mythrds[yy],NULL);, он говорит:

.cc:(.text+0x3e): undefined reference to `pthread_exit'

когда соблюдается очень похожий код в *.c файле с gcc, он отлично работает. Как я могу использовать pthread в c ++ .. (я также добавил -lpthread)

..
void *myThreads ( void *ptr )
{
...
pthread_exit(0); 
}
..

флаги:

g++ -lpthread -Wall -static -W -O9 -funroll-all-loops -finline -ffast-math

Ответы [ 2 ]

28 голосов
/ 21 апреля 2010

Вы можете попробовать использовать опцию -pthread для g ++.

   -pthread
       Adds support for multithreading with the pthreads library.  This
       option sets flags for both the preprocessor and linker.
1 голос
/ 21 апреля 2010

Есть ли в ваших заголовочных файлах pthread extern "C" { ... } вокруг прототипов функций? Это обычный случай, когда компоновщик не может ссылаться в C ++.

Это происходит из-за того, что C ++ обычно выполняет распределение имен, чтобы он мог кодировать детали параметров в символы (допуская полиморфизм). Например, функции:

void x(int);
void x(void);
void x(char,int,float,double);

все получают разные символы компоновщика.

Если в заголовочных файлах нет extern "C" { ... }, вам может потребоваться сделать это самостоятельно:

extern "C" {
    #include <pthread.h>
}

Надеюсь, это сработает.

...