两个线程交替打印a和b

allkillers 2016-05-02 03:14:03
两个问题:
第一,java中有个wait()方法,功能是当前线程睡眠,并且释放锁。想不清楚在模拟机中,是怎么用c语言实现的?
第二个问题,用c语言实现两个线程交替打印a和b。捉摸了好几天,硬是写不出来,高手们该你们出马了。

这两个问题,我觉得其实是一个问题。

比较流行的java示例代码交替打印如下“:
void thread_1{
public void run(){
while(true){
synchronized(lock){
System.out.println(“a”);
lock.notify();
lock.wait();
}
}

void thread_2{
public void run(){
while(true){
synchronized(lock){
System.out.println(“b”);
lock.notify();
lock.wait();
}
}
两个线程入口函数实现完全一样,我的想法是,关键点是wait这里怎么实现“睡眠并释放锁”的。
如果先睡眠,那怎么还有机会释放锁;
如果先释放锁的话,如果在这时发生线程重新调度,当前线程还没来得及睡眠,另一个线程被调度了并且睡眠了,这种情况下就会产生死锁。

所以我很奇怪虚拟机是怎么实现这个wait的,仅仅在用户态是不可能实现这样的功能的wait方法的,由此引申出我提到的第二个问题“如何c语言实现两个线程交替打印a和b”,求教各位,但愿大家知道我再说什么。
...全文
7870 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
renwotao2009 2016-05-04
  • 打赏
  • 举报
回复
或者使用Event也行
renwotao2009 2016-05-02
  • 打赏
  • 举报
回复
java的wait不同于c的,是特有的,没有看过他的源码,第二个问题,如果在windows 平台使用两个mutex即可,打印a线程获得mutexA打印a释放mutexB同理打印b的线程

18,773

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧