我正在学习多线程编程;在练习互斥时,我注意到它似乎不能在我的dule-core笔记本上正常工作。
互斥代码位于http://pastebin.com/axGY5y3c
结果如下:
count value:t[0]1
count value:t[1]1
count value:t[2]2
count value:t[3]3
count value:t[4]4结果表明,线程在开始时似乎会获得相同的初始值。这看起来不正确。
我的代码有什么问题吗?或者有没有资源提供在smp/ dule-core/多个cpu上运行java mutex的例子?
谢谢你的帮助。
发布于 2010-07-06 06:50:43
我对互斥算法不是很熟悉,所以我不能给你提供关于并发的严格帮助。但是,我确实在代码中发现了一行代码,它解释了为什么会得到列出的值:
public class MyThread extends Thread{
// [...]
private static int count = 0;当您启动四个线程时,run()将被调用四次,每次迭代都会递增count。
这段代码:
t[i].start();
int v = t[i].getCountValue();
System.out.println("count value:t["+i+"]"+v;因此是有效的:
count++;
System.out.println("count value:t["+i+"]"+count);发布于 2010-07-06 07:52:46
正如Paul提到的,您会感到困惑,因为"count“被声明为静态的,但是当您检索它时,您是在暗示您不希望它是静态的。从根本上说,你需要决定你想让程序做什么。
但是..。在任何情况下,还有其他问题:
发布于 2010-07-11 15:51:39
我想我大概知道我代码的问题所在。
在run()函数中移动getCountValue()之后,该函数位于锁的边界内。结果看起来是正确的。它会打印出来
pid:0 count value:1
pid:2 count value:2
pid:3 count value:3
pid:1 count value:4
pid:4 count value:5再次感谢你的帮助。我很感激。
https://stackoverflow.com/questions/3182512
复制相似问题