gpt4 book ai didi

c - Linux 内核互斥量

转载 作者:IT王子 更新时间:2023-10-29 00:41:42 25 4
gpt4 key购买 nike

我正在阅读“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);

为什么需要在锁定状态下创建互斥锁,然后在任务启动后获取互斥锁?

期待您的来信!谢谢。

最佳答案

当您调用 down() 时,您的线程将阻塞,直到另一个线程发出信号量信号为止。由于另一个线程尚未启动,该线程将无限期阻塞。这就是为什么你需要先启动线程,然后调用 down() 阻塞直到线程结束。

如果线程在您调用 down() 之前完成,那没关系,因为信号量将发出信号,而 down() 将简单地清除信号并返回。

关于c - Linux 内核互斥量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4757852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com