问题--关于同步和异步
2016-06-25 11:55
316 查看
同步异步在编程的时候经常会用到,比如处理资源竞争的时候会用到**同步机制**来保证资源的有效性,在一个进程中执行多个请求的时候用**异步机制**来保证效率。 今天在学习同步异步的时候突然想到一个问题,发个问题记录贴等以后看。也许未来的自己会嘲笑现在的自己居然这么SB = =
假设进程有进程A和进程B,他们各自完成的任务如下
进程A:请求资源x 请求资源y
进程B:请求资源x
进程A中用的是异步方案(假设为poll机制)处理两个请求,而进程A和进程B中使用**互斥**来对 资源x 进行访问。 问题的情况: 现在假设这种情况,资源x未就绪,资源y也未就绪,因此进程A和B都是阻塞状态。一段时间过后(假设发生了硬件中断)资源x就绪,进程A的异步机制(poll机制)将唤醒进程A,进程B也从睡眠状态(假设B使用等待队列)被唤醒。而此时,如果进程B先占领了资源x,由于资源访问的互斥,进程A访问不了资源x就又要进入睡眠状态了,此时就算资源y在不久后也就绪了,只要线程A卡在资源x上出不来,也无法处理资源y了。如此,进程A的异步机制就被限制住发挥不出作用来。 有没有一种方法可以解决这个矛盾的问题呢?现在只有一个想法就是,当请求受互斥保护的资源x失败时,如果进程A不挂起,那不就有机会继续处理资源y了?当然,不知道有没有一种互斥方案能够满足这种需求呢?