首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带smp的Java互斥锁

带smp的Java互斥锁
EN

Stack Overflow用户
提问于 2010-07-06 06:39:37
回答 3查看 588关注 0票数 0

我正在学习多线程编程;在练习互斥时,我注意到它似乎不能在我的dule-core笔记本上正常工作。

互斥代码位于http://pastebin.com/axGY5y3c

结果如下:

代码语言:javascript
复制
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的例子?

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

发布于 2010-07-06 06:50:43

我对互斥算法不是很熟悉,所以我不能给你提供关于并发的严格帮助。但是,我确实在代码中发现了一行代码,它解释了为什么会得到列出的值:

代码语言:javascript
复制
public class MyThread extends Thread{
    // [...]
    private static int count = 0;

当您启动四个线程时,run()将被调用四次,每次迭代都会递增count

这段代码:

代码语言:javascript
复制
t[i].start();
int v = t[i].getCountValue();
System.out.println("count value:t["+i+"]"+v;

因此是有效的:

代码语言:javascript
复制
count++;
System.out.println("count value:t["+i+"]"+count);
票数 1
EN

Stack Overflow用户

发布于 2010-07-06 07:52:46

正如Paul提到的,您会感到困惑,因为"count“被声明为静态的,但是当您检索它时,您是在暗示您不希望它是静态的。从根本上说,你需要决定你想让程序做什么。

但是..。在任何情况下,还有其他问题:

票数 1
EN

Stack Overflow用户

发布于 2010-07-11 15:51:39

我想我大概知道我代码的问题所在。

在run()函数中移动getCountValue()之后,该函数位于锁的边界内。结果看起来是正确的。它会打印出来

代码语言:javascript
复制
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

再次感谢你的帮助。我很感激。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3182512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档