2012-03-28 3 views
0

Я хочу создать pthread с функцией pthread, полученной удаленно. , так что pthread будет скомпилирован отдельно от основного кода, и я сохраню его в известном месте памяти. Когда я создаю pthread из основного статического потока, я передаю только ячейку памяти текста pthread, не имея текста pthread, написанного в основном кодеСоздание внешних pthreads с удаленными текстовыми файлами pthread.

Я не испытываю многопоточности. эта идея правильная и есть ли какие-либо специальные инструкции или директивы, которые я должен использовать?

Заранее спасибо.

ответ

0

Обычно это делается путем соединения.

/* source file 1*/ 
#include <pthread.h> 

extern void *thread(void *); /* better yet, put this in a common header file */ 
/* ... */ 
int main(void) 
{ 
    int err; 
    pthread_t thread_id; 
    /* ... */ 
    err = pthread_create(&thread_id, 0, &thread, 0); 
    /* ... */ 
} 

/* source file 2 */ 
void thread(void *) 
{ 
    /* ... */ 
} 

Вы отдельно компилируете файлы и связываете их вместе. Процесс связывания гарантирует, что ссылка thread в первом файле будет разрешена к адресу функции thread в другом исходном файле.

+0

Спасибо, это сработало. теперь у меня есть два объектных файла: один для основного кода и второй для pthread, однако они все еще объединены в один ELF. и я не знаю, для чего это адрес памяти, на который указывает указатель pthread. Я хочу, чтобы определить, где основной статический поток должен создавать и запускать новый pthread (что-то вроде extern void * partial_sum_worker (void *) будет находиться в адресе памяти 0x50000000), а во-вторых, любезно прояснить процесс связывания так что pthread перешел в основной ELF – bromanous

+0

Если вы хотите запускать код на произвольном числовом адресе, вы можете просто указать целочисленное значение на указатель функции, например '(void * (*) (void *)) 0x50000000)', как в: 'pthread_create (& id, 0, (void * (*) (void *)) 0x50000000, 0);' – Kaz

Смежные вопросы