本人小白一个,前两天做操作系统的进程同步实验,实验内容是哲学家进餐问题,本来没有错的代码,运行结果有很多“semop: Interrupted system call”,遂百度,百度上说是系统调用中断,什么意思呢,我的理解就是:当前进程阻塞于某个慢系统调用的时候,捕获了一个信号,然后去处理这个信号对应的函数,再返回时,就会出现错误,返回值为EINTR。而wait()操作正好是慢系统调用的一类
怎么解决呢,也是逛了逛百度,把(ret = semop(semid,&sb,1)改为while(ret = semop(semid,&sb,1)&&errno==EINTR);问题解决,主要就是当信号量中断返回错误值EINTR时,再次进行wait操作,直至不中断
嘻嘻嘻,第一篇博客,美滋滋,欢迎指正批评。