Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pthreads 使用pthread';创建外部pthread;远程接收美国文本_Pthreads_External - Fatal编程技术网

Pthreads 使用pthread';创建外部pthread;远程接收美国文本

Pthreads 使用pthread';创建外部pthread;远程接收美国文本,pthreads,external,Pthreads,External,我想创建一个pthread,远程接收pthread函数。 因此pthread将与主代码分开编译,我将它存储在一个已知的内存位置。 当我从主静态线程创建pthread时,我只传递pthread.text的内存位置,而没有在主代码中写入pthread的文本 我对多线程没有经验。这个想法正确吗?是否有我应该使用的特殊说明或指令 提前感谢。这通常由联动装置完成 /* source file 1*/ #include <pthread.h> extern void *thread(void

我想创建一个pthread,远程接收pthread函数。 因此pthread将与主代码分开编译,我将它存储在一个已知的内存位置。 当我从主静态线程创建pthread时,我只传递pthread.text的内存位置,而没有在主代码中写入pthread的文本

我对多线程没有经验。这个想法正确吗?是否有我应该使用的特殊说明或指令


提前感谢。

这通常由联动装置完成

/* 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 *)
{
  /* ... */
}
/*源文件1*/
#包括
外部空心*螺纹(空心*);/*更好的是,将其放在一个公共头文件中*/
/* ... */
内部主(空)
{
INTERR;
pthread_t thread_id;
/* ... */
err=pthread\u create(&thread\u id,0,&thread,0);
/* ... */
}
/*源文件2*/
空心螺纹(空心*)
{
/* ... */
}

您可以分别编译这些文件并链接在一起。链接过程确保将第一个文件中的
线程
引用解析为另一个源文件中的
线程
函数的地址。

谢谢,这已经奏效了。现在我有两个对象文件,一个用于主代码,另一个用于pthread,但是它们仍然合并到一个ELF中。我不清楚pthread指针指向的内存地址是什么。我希望能够定义主静态线程应该在何处创建和运行新的pthread(类似于extern void*partial_sum_worker(void*)的内容将位于内存地址0x50000000),然后,如果您想在任意数字地址运行代码,可以将整数值强制转换为函数指针,例如,
(void*(*)(void*)0x50000000)
,如:
pthread\u create(&id,0,(void*(*)(void*)0x50000000,0)