/*This code is in RTOS environment*/
/*Title: The wretched alternative.*/
/*This is wrong version*/

/*This code invites semaphore bugs or shared-data bugs everywhere*/
  
// File: tmrtask.c

long int lSecondsToday;	//global variable

void vTimerTask(void){
	.
	.
	.
	GetSemaphore(SEMAPHORE_TIME_OF_DAY);	//this function is provided by RTOS vendor
	++lSecondsToday;
	if(lSecondsToday == 60 * 60 * 24){
		lSecondsToday = 0L;
	}
	GiveSemaphore(SEMAPHORE_TIME_OF_DAY);
	.
	.
	.
}
-----------------------------------------------------
// File: hacker.c

extern long int lSecondsToday;

void vHackerTask(void){
	.
	.
	.
	/*Hope he remembers to use the semaphore*/
	lDeadline = lSecondsToday + 1800L
	.
	.
	.
	/*Here, too*/
	if(lSecondsToday > 3600 * 12)
	.
	.
	.
}
-----------------------------------------------------
// File: junior.c

extern long int lSecondsToday;

void vJuniorProgrammerTask (void){
	.
	.
	.
	/*Hope junior remembers to use the semaphore here. too*/
	for(l = lSecondsToday; l < lSecondsToday + 10; ++l)
	.
	.
	.
}