您的位置:首页 > 编程语言

问题--关于同步和异步

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了?当然,不知道有没有一种互斥方案能够满足这种需求呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  异步 竞争 编程