我在用户线程库上看到了一些问题,但似乎没有一个可以回答我的问题。我能够创建线程、运行它们、取消它们并退出它们。由于某种原因,我不能做的是让线程返回数据。
当我初始化我的线程库时,我设置我的退出线程上下文如下:
getcontext(&threadEnd);
threadEnd.uc_stack.ss_sp = (char *)malloc(SIGSTKSZ);
threadEnd.uc_stack.ss_size = SIGSTKSZ;
makecontext(&threadEnd, (void *) thread_exit, 1, &ReturnValue);
我创建一个线程并将其分配如下:
thread->myContext.uc_stack.ss_sp = (char *) malloc(SIGSTKSZ);
thread->myContext.uc_stack.ss_size = SIGSTKSZ;
thread->myContext.uc_link = &threadEnd;
当函数返回并调用 thread_exit()时:
void thread_exit(void* retval){
int* test;
if (retval != NULL)
{
test = (int*) retval;
printf("Returned value: %i\n", *test);
fflush(stdout);
}
打印输出始终为“返回值:0”
被调用的函数返回一个指向整数的指针。
我究竟做错了什么?