תורים
דוגמא 1
שגרת המערכת הבאה
עוברת על תור ומדפיסה את כל האיברים בו.
השגרה מקבלת את
ראש התור.
void prnList(int list)
{
int iIndex = firstid(list);
int ps;
disable(ps);
printf("%10s%10s%10s\n", "PID",
"ProcName","Prio");
while (iIndex < NPROC)
{
printf("%10d%10s%10d\n", iIndex,
proctab[iIndex].pname,
proctab[iIndex].pprio);
iIndex = q[iIndex].qnext;
}
restore(ps);
}
דוגמא 2
הפונקציה הבאה מציגה פונקציונאליות דומה לזו של enqueue,
אולם היא מוסיפה איבר בתחילת הרשימה ולא בסופה. נשים לב, שבדומה לפונקציות האחרות הפועלת על תורים, היא איננה עטופה
ב-disable/restore.
int putfirst(int item, int list)
{
struct qent *hptr; /* points to head entry */
struct qent *mptr; /* points to item entry */
hptr = &q[list];
mptr = &q[item];
mptr->qprev = list;
mptr->qnext = hptr->qnext;
q[hptr->qnext].qprev = item;
hptr->qnext = item;
return(item);
}
תודה
הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.