【发布时间】:2012-04-19 03:09:14
【问题描述】:
我曾经在pthread_exit() 上遇到过麻烦。我知道没有办法像这样使用pthread_exit()
pthread_exit(&some_local_variable);
我们总是需要像这样使用 pthread_exit():
pthread_exit("Thread Exit Message or something necessary information");
我曾经为测试目的编写了一个简单的程序。
我分别为两个整数的加法、减法、乘法和除法做了四个线程函数。然后在四个不同的线程上执行这些操作时,我尝试通过pthread_exit()返回操作结果。我的意思是这样的:
pthread_exit(&add_result);
当我在 CentOS 6 中运行代码时,我得到了想要的结果(即来自所有线程的垃圾值),因为 pthread_exit() 不能这样使用。但是,我糊涂了。因为这是我第一次在 Ubuntu 11.10 中运行该代码,并从三个线程中获得了三个绝对正确的结果(操作的正确结果)和一个线程中的垃圾值。这让我很困惑,因为为什么三个线程给出了正确的操作结果?
此外,我为这些线程使用了不同的睡眠时间。我发现睡眠时间最少的线程给出了垃圾值。
gcc 是这两个操作系统的编译器,为什么一个系统会有这样的错误? 它使像我这样的新手程序员感到困惑。如果不是错误,谁能向我解释为什么会这样?
【问题讨论】:
-
某事有效并不意味着它是正确的...... :)
-
只有一个音符。您不必总是返回字符串常量。例如,您可以在
malloc ()一些内存中存储一个值,然后返回malloc'd 指针。重点是:返回线程退出后仍然有效的any地址。 -
谢谢。我之前应该得到的。
标签: c linux multithreading ubuntu centos