资源简介
读者优先-读者线程,读者优先-写者线程,读者优先处理函数,写者优先-读者线程,写者优先-写者线程,写者优先处理函数...
代码片段和文件信息
#include “windows.h“
#include
#include
#include
#include
#include
#include
#define READER ‘R‘ //读者
#define WRITER ‘W‘ //写者
#define INTE_PER_SEC 1000 //每秒时钟中断的数目
#define MAX_THREAD_NUM 64 //最大线程数目
#define MAX_FILE_NUM 32 //最大文件数目
#define MAX_STR_LEN 32 //字符串的长度
int readcount=0; //读者数目
int writecount=0; //写者数目
CRITICAL_SECTION RP_Write; //临界区
CRITICAL_SECTION cs_Write;
CRITICAL_SECTION cs_Read;
struct ThreadInfo
{
int serial; //线程序号
char entity; //线程类别(判断是读者线程还是写者线程)
double delay; //线程延迟时间
double persist; //线程读写操作时间
};
/**************************************************************************/
//读者优先---读者线程
//P:读者线程信息
void RP_ReaderThread(void *p)
{
//互斥变量
HANDLE h_Mutex;
h_Mutex=OpenMutex(MUTEX_ALL_ACCESSFALSE“mutex_for_readcount“);
DWORD wait_for_mutex; //等待互斥变量所有权
DWORD m_delay; //延迟时间
DWORD m_persist; //读文件持续时间
int m_serial; //线程序号
//从参数中获得信息
m_serial=((ThreadInfo*)(p))->serial;
m_delay=(DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);
m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC);
Sleep(m_delay); //延迟等待
printf(“Reader thread %d sents the reading require.\n“m_serial);
//等待互斥信号保证对ReadCount 的访问、修改互斥
wait_for_mutex=WaitForSingleobject(h_Mutex-1);
//读者数目增加
readcount++;
if(readcount==1)
{
//第一个读者等待资源
EnterCriticalSection(&RP_Write);
}
ReleaseMutex(h_Mutex); //释放互斥信号
//读文件
printf(“Reader thread %d begins to read file.\n“m_serial);
Sleep(m_persist);
//退出线程
printf(“Reader thread %d finished reading file.\n“m_serial);
//等待互斥信号保证对ReadCount的访问修改互斥
wait_for_mutex=WaitForSingleobject(h_Mutex-1);
//读者数目减少
readcount--;
if(readcount==0)
{
//如果所有的读者读完唤醒写者
LeaveCriticalSection(&RP_Write);
}
ReleaseMutex(h_Mutex); //释放互斥信号
}
/**************************************************************************/
//读者优先---写者线程
//P:写者线程信息
void RP_WriterThread(void *p)
{
DWORD m_delay; //延迟时间
DWORD m_persist; //写文件持续时间
int m_serial; //线程序号
// 从参数中获得信息
m_serial=((ThreadInfo*)(p))->serial ;
m_delay=(DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);
m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC);
Sleep(m_delay);
printf(“Writer thread %d sents the writing require.\n“m_serial);
//等待资源
EnterCriticalSection(&RP_Write);
//写文件
printf(“Writer thread %d begins to write to the file.\n“m_serial);
Sleep(m_persist);
//退出线程
printf(“Writer thread %d finished writing to the file.\n“m_serial);
//释放资源
LeaveCriticalSection(&RP_Write);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10121 2007-06-23 14:01 Reader and Writer.cpp
文件 45 2007-04-13 16:19 thread.txt
----------- --------- ---------- ----- ----
10166 2
- 上一篇:TDOA代码
- 下一篇:用Prim和Kruskal算法构造最小生成树
评论
共有 条评论