我在阅读“Linux设备驱动程序第3版”,关于并发性和竞争条件的章节。有一个我不完全明白的例子。他们正在讨论内核编程中的一种常见模式,当需要在当前线程之外启动活动(例如,新的内核线程或用户进程,请求现有进程或基于硬件的操作)时,请等待该活动完成。不是非常有效的解决方案的例子是:Linux内核互斥体
struct semaphore sem;
init_MUTEX_LOCKED(&sem);
start_external_task(&sem);
down(&sem);
然后,他们认为外部任务调用(& SEM)时,它的工作就完成了。
我不明白为什么我们不能这样来做:
struct semaphore sem;
down(&sem);
start_external_task(&sem);
为什么是必要的锁定状态,以创建互斥量,然后获得任务之后互斥体已经开始了吗?
期待您的回音!谢谢。
+1,但我认为使用术语`semaphore`而不是`mutex`会更好。 SEMAPHORE:可以通过任何线程上/下。 MUTEX:拥有所有权,只有锁拥有者线程可以启用互斥锁。在这种情况下,我们需要使用信号量,因为它的目的是线程之间的通信... – Vojta 2011-01-21 11:06:39