我正在学习C,但我的书提供的资源非常少。我想知道它是否可能,使用线程来详细说明然后将结果传递给main是有用的。在这种情况下,我想知道如何将信息从一个线程传递给main(类似于java中的方法返回)。唯一的解决方案是使用全局变量? 这是一个小例子来解释我想做什么。这可能/有用吗?
主:
int i = 1;
pthread_create(tid,NULL,functionTH,NULL);
int z = //getResultFromThread
线程“功能”:
void * functionTH(){
int z = 2;
//return value 2 to the main and assign it to k in the main.
}
答案 0 :(得分:3)
查看pthread_create的原型。
int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
您的主题(start_routine
)是一个返回void *
的函数。所以你的代码错了,因为你的线程函数什么也没有返回你可以猜到,你通过返回指针将值返回给你的主线程。
您可以通过调用pthread_join等待线程完成以读取此值。从线程返回的值通过value_ptr
arg。
pthread_join()函数应暂停执行调用 线程直到目标线程终止,除非是目标线程 已经终止了。从成功的pthread_join()返回 使用非NULL value_ptr参数调用,传递给的值 终止线程的pthread_exit()应该可用 value_ptr引用的位置。
当然,您不必使用此机制。全局变量可以正常工作,但你必须同步对变量的访问,否则你最终会遇到竞争条件。
答案 1 :(得分:1)
内存在线程之间共享,因此很容易使用queues传递指针(每个线程使用一个队列)。另外,请务必使用mutex locks和其他concurrency control techniques。
这是另一篇S.O帖子,展示了如何实现message passing between threads using queues。
这篇标题为“Queues, Mutexes, Semaphores..”的文章在解释在C语言中构建多线程程序时必须考虑的竞争条件和关键部分的所有注意事项方面做得很好。
如果你对学习性能感兴趣,Bartosz Milewski的文章“Beyond Locks and Messages: The Future of Concurrent Programming”可以很好地兼顾共享内存和消息传递,并且可以很好地了解事务内存的优势和缺点经典锁。
如果您有任何疑问,请与我们联系!