#include <conf.h>
xmain() // è il processo iniziale Xinu!
{
putc(CONSOLE,'h');
putc(CONSOLE,'i');
putc(CONSOLE,'\n');
}
#include <conf.h>
#include <kernel.h>
void prA(void)
{
while (1)
putc(CONSOLE, 'A');
}
void prB(void)
{
while (1)
putc(CONSOLE, 'B');
}
xmain(void)
{
resume( create(prA, INITSTK, INITPRIO, "proc 1", 0) ); // vedi system calls manual
resume( create(prB, INITSTK, INITPRIO, "proc 2", 0) );
xdone();
}
[0] C:\USER\pcx\MAIN> make ex2.exe
MAKE Version 3.6 Copyright (c) 1992 Borland International
Available memory 30740480 bytes
bcc -mh -c -Ic:\user\pcx\src\h -w- -DTURBOC ex2.c
Borland C++ Version 3.1 Copyright (c) 1992 Borland International
ex2.c:
Available memory 4185484
bcc -mh -eex2.exe -Ic:\user\pcx\src\h -w- -DTURBOC -Lc:\user\pcx\lib ex
2.obj xkernel.lib xio.lib xutil.lib xshell.lib
Borland C++ Version 3.1 Copyright (c) 1992 Borland International
Turbo Link Version 5.1 Copyright (c) 1992 Borland International
Available memory 4229020
#include <conf.h>
#include <kernel.h>
void prntr(int ch)
{
int i; // i privata del processo
for (i = 0; i < 400; i++)
putc(CONSOLE, ch);
}
xmain(void)
{
resume( create(prntr, INITSTK, INITPRIO, "proc 1", 1, 'A') ); // see system calls manual
resume( create(prntr, INITSTK, INITPRIO, "proc 2", 1, 'B') );
xdone();
}
#include <conf.h>
#include <kernel.h>
int n = 0;
void produce(void) {
int i;
for (i = 0; i < 2000; i++)
n++;
}
void consume(void) {
int i;
for (i = 0; i < 2000; i++)
printf("%d: n is %d\n", i, n);
}
xmain(void)
{
resume( create(consume, INITSTK, INITPRIO, "cons", 0) );
resume( create(produce, INITSTK, INITPRIO, "prod", 0) );
}
NB: n passa da 0 a 2000! produce è molto più lento (I/O).
#include <conf.h>
#include <kernel.h>
int n = 0;
void produce(int consumed, int produced) {
int i;
for (i = 0; i < 2000; i++) {
wait(consumed);
n++;
signal(produced);
}
}
void consume(int consumed, int produced) {
int i;
for (i = 0; i < 2000; i++) {
wait(produced);
printf("%d: n is %d\n", i, n);
signal(consumed);
}
}
xmain(void)
{
int produced, consumed; // semafori
consumed = screate(1); produced = screate(0);
resume( create(consume, INITSTK, INITPRIO, "cons", 2, consumed, produced) );
resume( create(produce, INITSTK, INITPRIO, "prod", 2, consumed, produced) );
}