Welcome
» NERWous C
» Pel
At Attribute
When a task is created via a simple pel statement:
It is also possible to hard-code the value of the cel. Like the at attribute for the mel statement, the
Location Property
The pelling task and the pelled task can find out what is the identification of the cel in use via the
Down Exception
Previous Next Top
At Attribute
When a task is created via a simple pel statement:
<!>producer();
it is arbitrarily assigned to a computer element (cel) in a pool of cels maintained by the CHAOS runtime environment. There are times that the work requires a specialized hardware. Like the at attribute for mel creations, the at
attribute can be used with pel creations to assign a computing "location" to a task:
extern <cel> VENDOR, DISTRIBUTOR, USER;
main () {
<mel at=DISTRIBUTOR> int store;
<! at=VENDOR> Producer (store);
<! at=USER> Consumer (store);
}
void Producer (<mel> int store) {
int c;
while ( c = Produce() )
<?>store = c;
<close>store;
}
void Consumer (<mel> int store) {
try {
while ( 1 )
Consume(<?>store);
} catch ( store<CLOSED> ) {
return;
}
}
The cel entities VENDOR
, DISTRIBUTOR
and USER
are defined as extern
. Their definition will come from a configuration file that is associated with the above NERWous C program. This configuration file is specific to the runtime environment, and allows the same NERWous C program to be run on different physical platforms.
It is also possible to hard-code the value of the cel. Like the at attribute for the mel statement, the
at
attribute for the pel statement can accept either a cel value or a location value:
#define VENDORURL "https://pelvendor.nerw/"
#define USERURL "https://peluser.nerw/"
<cel> VENDOR;
VENDOR<id> = VENDORURL;
<! at=VENDOR> Producer (store);
<! at=USERURL> Consumer (store);
The Producer
task uses the cel variable VENDOR
like before. However this time, this cel is initialized within the program with VENDORURL
as the identification value. The VENDOR
cel can be initialized more succinctly:
<cel> VENDOR = { VENDORURL };
The Consumer
task specifies the identification value USERURL
directly. The CHAOS runtime will automatically create a cel variable with this identification value, and assign it to the Consumer
task.
Location Property
The pelling task and the pelled task can find out what is the identification of the cel in use via the
location
property.
extern <cel> VENDOR, DISTRIBUTOR, USER;
main () {
<mel at=DISTRIBUTOR> int store;
<pel> prod = <! at=VENDOR> Producer (store);
<pel> cons = <! at=USER> Consumer (store);
printf ("Producer at [%s]", prod<location>);
printf ("Consumer at [%s]", cons<location>);
}
void Producer (<mel> int store) {
printf ("Running at [%s]", pel<location>);
int c;
while ( c = Produce() )
<?>store = c;
<close>store;
}
void Consumer (<mel> int store) {
printf ("Running at [%s]", pel<location>);
try {
while ( 1 )
Consume(<?>store);
} catch ( store<CLOSED> ) {
return;
}
}
The pelling task, main
, uses the pel variables, prod
and cons
, in order to access the location
property. For the pelled tasks, Producer
and Consumer
, the location
property is accessed via the default pel
variable which represents the running task.
Down Exception
main () {
<pel> task_producer = <!> Producer ();
<pel> task_consumer = <!> Consumer (task_producer);
}
int Producer () {
while ( 1 ) {
int c = produce();
if ( c == 0 ) {
<return> c;
}
<release> c;
}
}
void Consumer (<pel>tprod) {
while ( 1 ) {
try {
consume (<?>tprod);
}
catch (tprod<ENDED>) {
printf ("I am ending due to the Producer having ended");
return;
}
catch (tprod<DOWN>) {
printf ("I am ending due to the Producer has crashed");
return;
}
}
}
Previous Next Top
No comments:
Post a Comment