|
操作系统实验进程同步--读者优先(4) return 0; } DWORD WINAPI WriterProc(LPVOID lpParam) { Person *pPerson = (Person*)lpParam; // wait for the start time while(g_CurrentTime != pPerson->m_nStartTime) { } printf("Writer %d is Requesting ...\n",pPerson->m_nID); WaitForSingleObject(g_hWriteSemaphore,INFINITE); // modify the writer's real start time pPerson->m_nStartTime = g_CurrentTime; printf("Writer %d is Writting the Shared Buffer...\n",pPerson->m_nID); while(g_CurrentTime <= pPerson->m_nStartTime + pPerson->m_nWorkTime) { // .. perform write operations } printf("Writer %d is Exit...\n",pPerson->m_nID); ReleaseSemaphore(g_hWriteSemaphore,1,NULL); ExitThread(0); return 0; } bool CreateReader(int StartTime,int WorkTime,int ID) { DWORD dwThreadID; if(g_NumPerson >= MAX_PERSON) return false; Person *pPerson = &g_Persons[g_NumPerson]; pPerson->m_nID = ID; pPerson->m_nStartTime = StartTime; pPerson->m_nWorkTime = WorkTime; pPerson->m_nType = READER; g_NumPerson++; // Create an New Thread pPerson->m_hThread = CreateThread(NULL,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID); if(pPerson->m_hThread == NULL) return false; return true; } bool CreateWriter(int StartTime,int WorkTime,int ID) { DWORD dwThreadID; if(g_NumPerson >= MAX_PERSON) return false; Person *pPerson = &g_Persons[g_NumPerson]; pPerson->m_nID = ID;
|