两个线程交替打印a和b
两个问题:
第一,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”,求教各位,但愿大家知道我再说什么。