#include "as5.h" #include #define WRITE_TIMES 10 void open_write(SysSemaphores *pSems) { pSems->Wait(SEM_QUEUE); pSems->Wait(SEM_WRITE); pSems->Signal(SEM_QUEUE); } void close_write(SysSemaphores *pSems) { pSems->Signal(SEM_WRITE); } void WriterFunction(SysSemaphores *pSems, char *shmPtr) { char data[SHM_SIZE-sizeof(int)]; int pid; srand((unsigned)time(NULL)*pid); FNERROR("getpid", pid = getpid(),); printf("%d: Writer %d starting\r\n", getTime(), pid); fflush(NULL); for (int i = 0; i < WRITE_TIMES; ++i) { //create data to write for (int i = 0; i < sizeof(data); ++i) data[i] = (char)(rand() % 256); milliSleep(rand()%50); printf("%d:\tWriter %d wants to write\r\n", getTime(), pid); fflush(NULL); open_write(pSems); //write data printf("%d:\t\t+Writer %d writing\r\n", getTime(), pid); fflush(NULL); for (int i = 0; i < sizeof(data); ++i) shmPtr[i] = data[i]; milliSleep(rand()%50); printf("%d:\t\t-Writer %d done writing\r\n", getTime(), pid); fflush(NULL); close_write(pSems); } printf("%d: Writer %d exiting\r\n", getTime(), pid); fflush(NULL); }