Mar*_*ark 6 c linux multithreading kernel
我正在阅读"Linux设备驱动程序第3版",关于同意和竞争条件的章节.有一个我不完全理解的例子; 他们正在谈论内核编程中的一个常见模式,当需要在当前线程之外启动活动(例如,新内核线程或用户进程,请求现有进程或基于硬件的操作)时,等待该活动到完成.不是非常有效的解决方案的例子是:
struct semaphore sem;
init_MUTEX_LOCKED(&sem);
start_external_task(&sem);
down(&sem);
Run Code Online (Sandbox Code Playgroud)
然后他们建议外部任务在其工作完成时调用(&sem).
我不明白为什么我们不能这样做:
struct semaphore sem;
down(&sem);
start_external_task(&sem);
Run Code Online (Sandbox Code Playgroud)
为什么有必要在锁定状态下创建互斥锁,然后在任务启动后获取互斥锁?
期待您的回音!谢谢.
Ant*_*bry 10
当你调用down()时,你的线程将阻塞,直到另一个线程发出信号信号.由于其他线程尚未启动,线程将无限期地阻塞.这就是为什么你需要先启动线程,然后调用down()来阻塞直到线程完成.
如果线程在你调用down()之前完成,那没关系,因为信号量将被发信号并且down()将简单地清除信号并返回.
| 归档时间: |
|
| 查看次数: |
9997 次 |
| 最近记录: |