我正在阅读"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)
为什么有必要在锁定状态下创建互斥锁,然后在任务启动后获取互斥锁?
期待您的回音!谢谢.
理解这个表达式有困难:
(x + y - 1) / y * y
Run Code Online (Sandbox Code Playgroud)
运算符优先级如下(根据我的理解和K&R2,2.12表2.1):
1)评估parens中的内容:首先是(x + y),然后是(x + y)-1
2)'*'运算符的优先级高于'/'所以它应该先行,比特看起来(y*y)被评估,然后(x + y-1)的结果除以乘积(y)*Y).我不太清楚.
3)我听说过通常以这种形式写的:
(x + y - 1) / y * y
Run Code Online (Sandbox Code Playgroud)
那是对的吗?非常感谢你提前!