Linux kernel 发出信号时内核获取堆栈
我写的读者和作者的内核必须在他们之间同步,并阻止已经读过信息的作者 当我在排队等候时,我得到信号,所以我做休整Linux kernel 发出信号时内核获取堆栈,linux-kernel,kernel-module,Linux Kernel,Kernel Module,我写的读者和作者的内核必须在他们之间同步,并阻止已经读过信息的作者 当我在排队等候时,我得到信号,所以我做休整 while (i_Allready_Read(myf) == ALLREADY_READ || isExistWriter == false ) //while (!(i_Allready_Read(aliveProc,current->pid))) { int i, is_sig = 0; printk(KERN_INFO "\n\n*****entered s
while (i_Allready_Read(myf) == ALLREADY_READ || isExistWriter == false )
//while (!(i_Allready_Read(aliveProc,current->pid)))
{
int i, is_sig = 0;
printk(KERN_INFO "\n\n*****entered set in read ******\n\n" );
if (i_Allready_Read(myf) == ALLREADY_READ )
wait_event_interruptible (readWaitQ1, !i_Allready_Read(myf));
else
wait_event_interruptible (readWaitQ1, isExistWriter);
//printk(KERN_INFO "Read Wakeup %d\n",current->pid);
for (i = 0; i < _NSIG_WORDS && !is_sig; i++)
{
is_sig = current->pending.signal.sig[i] & ~current->blocked.sig[i];
}
if (is_sig)
{
handledClose(myf);
module_put (THIS_MODULE);
return -EINTR;
}
}
return 0;//success
{
/*
*如果我们关闭了另一个作家
*将能够进入许可证
*/
}
而我的亲密却毫无意义
我做错了什么?你在哪里叫醒等待队列
您应该调用
唤醒(readWaitQ1)代码>某处。在将isExistWriter设置为true后可能出现。在哪里唤醒等待队列
您应该调用唤醒(readWaitQ1)代码>某处。在您将isExistWriter
设置为true后可能发生。此代码显然是正确的,没有任何原因我可以理解它开始工作:)此代码显然是正确的,没有任何原因我可以理解它开始工作:)
inline void handledClose(struct file *myf)//v
if (myf == writerpid )
{
isExistWriter = DOESNT_EXIST;
//printk(KERN_INFO "procfs_close : this is pid that just closed %d \n", writerpid);
}
/*
*else its a reader so our numofreaders
*need to decremented
*/
else
{
removeFromArr(myf);
numOfReaders--;
}