| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 499 人关注过本帖
标题:请教一个多线程的问题啊.
只看楼主 加入收藏
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
结帖率:94.74%
收藏
已结贴  问题点数:20 回复次数:7 
请教一个多线程的问题啊.

线程一
void push(char c)
{
//位置0
        data[index] = c;         
       // 位置1;
        index++;
//位置3
}
线程二
char pop()
{
        index--;
       //位置2
        return data[index];
}


比如现在运行到了线程1的位置1 ,可能突然就去运行线程 2了了吗?       如果可能的话. 如果在位置0,3之间加锁,是不是就会保证一直运行完呀?
搜索更多相关主题的帖子: 线程 
2010-12-10 14:34
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
java里的同步方法好像可以达到让线程执行完.  linux和windows下的加锁和解锁也是这个作用吗
2010-12-10 14:42
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:10 
不止这样,还可能在你的data[index] = c;中途中断,
就算你0-3有加锁,你的pop函数也必须加锁

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-12-10 14:45
七有新人
Rank: 3Rank: 3
来 自:哈尔滨
等 级:论坛游侠
帖 子:64
专家分:132
注 册:2010-10-12
收藏
得分:10 
线程的目的就是为了程序的并发运行
如果两个线程之间没有数据的读写影响的话,那么不必加锁
如果两个线程之间有数据的读写关系影响的话,那么应该在每次读写前判断锁的状态进行加解锁

你的这个例子没法确定在哪里加锁,
锁跟数据是联系在一起的

图!
不一定是真相!
2010-12-10 14:45
七有新人
Rank: 3Rank: 3
来 自:哈尔滨
等 级:论坛游侠
帖 子:64
专家分:132
注 册:2010-10-12
收藏
得分:0 
额 ,进出栈阿,没有注意函数名
可以在0,3处加

图!
不一定是真相!
2010-12-10 14:54
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
回复 3楼 御坂美琴
也就是要一进入线程就加锁吗?(然后就能一直运行到解锁的位置?)
2010-12-10 16:20
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
不是的,锁的工作原理并不是这样,即使你加锁,中间仍然可能会断开
关键是一般这种互斥锁,最多只能由一个线程加锁,其它线程要加锁的话,要么等待,要么跳过返回错误或者异常,除非等加锁的线程解锁
这样能保证其它线程无法在这个线程加锁的时候,运行由锁保护的代码段,并不是保证中间不会断开

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-12-10 16:30
七有新人
Rank: 3Rank: 3
来 自:哈尔滨
等 级:论坛游侠
帖 子:64
专家分:132
注 册:2010-10-12
收藏
得分:0 
回复 7楼 御坂美琴
“中间断开”是什么意思?
为什么会中间断开那?

图!
不一定是真相!
2010-12-10 17:29
快速回复:请教一个多线程的问题啊.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019283 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved