1
41
您返回的是一个局部变量的地址,当线程函数退出时,该变量不再存在。在任何情况下,为什么要调用pthread_exit?为什么不简单地从线程函数返回一个值呢?
然后主要是:
如果需要返回一个复杂的值(比如结构),那么通过malloc()动态分配它并返回一个指针可能是最容易的。当然,启动线程的代码将负责释放内存。 |
2
25
您返回了一个指向局部变量的指针。即使不涉及线程,这也很糟糕。 当启动的线程与连接的线程相同时,通常的方法是将指向int的指针传递给调用方管理的位置,作为pthread_create的第四个参数。然后,它将成为线程入口点的(唯一)参数。您可以(如果愿意)使用线程出口值指示成功:
如果必须对结构使用线程出口值,那么必须动态地分配它(并确保连接线程的人释放它)。不过,这并不理想。 |
3
18
这是一个正确的解决方案。在这种情况下,TData被分配到主线程中,并且有一个空间供线程放置其结果。
|
4
3
我想你得把号码堆起来。这个
别忘了
另一种解决方案是返回指针值形式的数字,如NeilButterworth建议的那样。 |
5
2
您正在返回对的引用 雷特 它是堆栈上的变量。 |
6
2
|
7
1
问题:返回/存储多线程变量的最佳实践是什么?全局哈希表? 这完全取决于你想要返回什么以及你将如何使用它?如果您只想返回线程的状态(比如线程是否完成了它打算做的事情),那么只需使用pthread_exit或使用返回语句从线程函数返回值。 但是,如果您想要更多的信息用于进一步的处理,那么您可以使用全局数据结构。但是,在这种情况下,您需要使用适当的同步原语来处理并发性问题。或者,您可以分配一些动态内存(对于您希望存储数据的结构更为合适),并通过pthread_exit发送数据,一旦线程加入,您就在另一个全局结构中更新它。这样,只有一个主线程会更新全局结构,并发问题得到解决。但是,您需要确保释放由不同线程分配的所有内存。 |
8
0
如果您不愿意返回地址,并且只有一个变量(例如要返回的整数值),那么您甚至可以在传递之前将其类型化为(void*),然后在主数据中收集它时,再次将其类型化为(int)。你有这个价值,不会发出难看的警告。 |
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |