【发布时间】:2011-06-13 01:44:13
【问题描述】:
我正在阅读“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);
为什么要在锁定状态下创建互斥锁,然后在任务启动后获取互斥锁?
期待您的回音!谢谢。
【问题讨论】:
标签: c linux multithreading kernel