lpStartAddress, // thread function
LPVOID lpParameter, // thread argument
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier
);
ExitThread 用于结束当前线程。
VOID ExitThread(DWORD dwExitCode // exit code for this thread);
Sleep 可在指定的时间内挂起当前线程。
VOID Sleep(DWORD dwMilliseconds // sleep time);
信号量控制:
CreateMutex 创建一个互斥对象,返回对象句柄;
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // SD
BOOL bInitialOwner, // initial owner
LPCTSTR lpName // object name);
OpenMutex 打开并返回一个已存在的互斥对象句柄,用于后续访问;
HANDLE OpenMutex(
DWORD dwDesiredAccess, // access
BOOL bInheritHandle, // inheritance option
LPCTSTR lpName // object name);
ReleaseMutex 释放对互斥对象的占用,使之成为可用。
BOOL ReleaseMutex(
HANDLE hMutex // handle to mutex);
WaitForSingleObject 可在指定的时间内等待指定对象为可用状态;
DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object
DWORD dwMilliseconds // time-out interval);
测试文件数据结构如下:
struct ThreadInfo
{
int serial; //线程序号
char entity; //线程类别(判断是读者还是写者线程)
double delay; //线程延迟时间
double persist; //线程读写操作时间
};
void RP_ReaderThread(void *p) // 读者优先情况下的读者线程信息
void RP_WriterThread(void *p) //读者优先情况下的写者线程信息
void ReaderPriority(char *file) //读者优先处理函数
void WP_ReaderThread(void *p) //写者优先情况下的读者线程信息
void WP_ReaderThread(void *p) //写者优先情况下的写者线程信息
void WriterPriority(char *file) //写者优先处理函数
int main(int argc,char *argv //主函数,负责调用读者或者写者优先函数
3.2 流程图
否
是
是 &nb