#include
#include
using namespace std;
class output {
static char sharedResource[255]; // this is the shared resource
static int inuse; // buffer available if 0; in use otherwise
static int oindex; // index of sharedResource
char str[80];
int i; // index of next char in str
int who; // identifies the object, must be > 0
public:
output(int w, char *s) {
strcpy(str, s);
i = 0;
who = w;
}
int putbuf()
{
if(!str[ i ]) { // done outputting
inuse = 0; // release buffer
return 0; // signal termination
}
if(!inuse) // get buffer
inuse = who;
if(inuse != who) // in use by someone else
return -1;
if(str[ i ]) { // still chars to output
sharedResource[oindex] = str[ i ];
i++; oindex++;
sharedResource[oindex] = '\0';// always keep null-terminated
return 1;
}
return 0;
}
void show() {
cout << sharedResource << '\n';
}
};
char output::sharedResource[255]; // this is the shared resource
int output::inuse = 0; // buffer available if 0; in use otherwise
int output::oindex = 0; // index of sharedResource
int main()
{
output object1(1, "This is a test"), object2(2, " of statics");
while(object1.putbuf() | object2.putbuf()) ; // output chars
object1.show();
return 0;
}