一、什么是同步与互斥?
一句话理解同步与互斥:我等你用完厕所,我再用厕所。 什么叫同步?
就是:哎哎哎,我正在用厕所,你等会。 什么叫互斥?
就是:哎哎哎,我正在用厕所,你不能进来。 同步与互斥经常放在一起讲,是因为它们之的关系很大,“互斥”操作可以使用“同步”来实现。我“等”你用 完厕所,我再用厕所。这不就是用“同步”来实现“互斥”吗?
再举一个例子。在团队活动里,同事A先写完报表,经理B才能拿去向领导汇报。经理B必须等同事A完 成报表,AB之间有依赖,B必须放慢脚步,被称为同步。在团队活动中,同事A已经使用会议室了,经 理B也想使用,即使经理B是领导,他也得等着,这就叫互斥。经理B跟同事A说:你用完会议室就提醒 我。这就是使用"同步"来实现"互斥"。
二、同步与互斥各类方法对比
能实现同步、互斥的内核方法有:任务通知(task notification)、队列(queue)、事件组(event group)、 信号量(semaphoe)、互斥量(mutex)。
它们都有类似的操作方法:获取/释放、阻塞/唤醒、超时。比如:
A获取资源,用完后A释放资源
A获取不到资源则阻塞,B释放资源并把A唤醒
A获取不到资源则阻塞,并定个闹钟;A要么超时返回,要么在这段时间内因为B释放资源而被唤 醒。
这些内核对象五花八门,记不住怎么办?我也记不住,通过对比的方法来区分它们。
能否传信息?只能传递状态? 为众生?只为你? 我生产,你们消费? 我上锁,只能由我开锁


1万+

被折叠的 条评论
为什么被折叠?



