每个人我都有一些关于Linux的任务的问题,我知道所有当前处于TASK_RUNNING状态的任务都是在一个叫做runqueue的数据结构中,但是那些正在等待某个事件的任务呢(不是TASK_RUNNING的状态,例如正在等待键盘输入的状态)。对于这样的任务,我有没有其他的数据结构,或者只有通用的list of tasks?提前感谢您的解释
我正在阅读“Robert的Linux内核开发第三版”,以了解Linux内核是如何工作的。(2.6.2.3)
我对等待队列的工作方式感到困惑,例如,下面的代码:
/* ‘q’ is the wait queue we wish to sleep on */
DEFINE_WAIT(wait);
add_wait_queue(q, &wait);
while (!condition) { /* condition is the event that we are waiting for */
prepare_to_wait(&q, &wait, TAS
我正在尝试从实现Michael-Scott FIFO队列。我无法实现他们对ABA问题的解决方案。我得到了这个错误。
error: incompatible type for argument 1 of '__sync_val_compare_and_swap'
作为参考,我使用linux机器在英特尔架构上编译这段代码。如果您需要更多关于我的设置的信息,请联系我。
sync_val_CAS似乎只能处理最多32位的值。因此,当我删除用于消除ABA问题的计数器时,一切都编译并运行良好。
有人知道我应该在这里使用的相关64位CAS指令吗?
另一个问题是,是否有更好(更快)的无锁fifo