我正在阅读“
Linux设备驱动程序第3版”,关于同意和竞争条件的章节.有一个我不完全理解的例子;他们正在谈论内核编程中的一个常见模式,当需要在当前线程之外启动活动(例如,新内核线程或用户进程,请求现有进程或基于硬件的操作)时,等待该活动到完成.不是非常有效的解决方案的例子是:
struct semaphore sem; init_MUTEX_LOCKED(&sem); start_external_task(&sem); down(&sem);
然后他们建议外部任务在其工作完成时调用(& sem).
我不明白为什么我们不能这样做:
struct semaphore sem; down(&sem); start_external_task(&sem);
为什么有必要在锁定状态下创建互斥锁,然后在任务启动后获取互斥锁?
期待您的回音!谢谢.