帮看一下代码,执行异常-关于系统进程的有关问题
帮看一下代码,执行错误---关于系统进程的问题
读者——写者问题
#include <stdlib.h>
#include <windows.h>
#include "Reader-Writer.h "
#include "Semaphore.h "
// 这是 Windows 下多线程工作的 P 操作
#define P(S) WaitForSingleObject(S, INFINITE)
// 这是 Windows 下多线程工作的 V 操作
#define V(S) ReleaseSemaphore(S, 1, NULL)
const int RN = 5; // 所有读者总数
const int WN = 3; // 所有写者总数
HANDLE Sdoc; // 文档信号量——互斥量
HANDLE Sr; // 读者信号量——广义信号量
HANDLE Scnt; // 保护 g_cntReader 的互斥量
int g_cntReader = 0; // 读者个数计数器
// ##############+. Descripted By Tang Houjian [2003-9-26 20:10:49] .+##########
// | funcname : JustWait ( )
// + note : 显示一些信息,让后等待
// |
// +-----------------------------+
// | ret val : void
// |
// + Parameter :
// | [ int ] - nReader 读者(写者)编号,读者> 0,写者 <0
// | [ int ] - min 操作等待的最短时间
// | [ int ] - max 操作等待得最长时间,实际等待的时间介于两者之间
// | [ LPCSTR ] - info 要显示的信息
void JustWait(int nReader, int min, int max, LPCSTR info)
// +-----------------------------+
{
// 等待时间的基本量,以毫秒表示
const int BASETIME = 1000;
// 实际等待得时间
int wait_time = 0;
if (max==min) // 判断是为了避免 %0错误,注意取随机值
wait_time = min*BASETIME;
else
wait_time = rand()%(max*BASETIME-min*BASETIME) + min*BASETIME; </P < p>
// 最终显示的信息缓冲
char s_out[128];
// 读者大于0,写者小于0
if (nReader > 0)
sprintf(s_out, "Reader [%d]: %s\n ", nReader, info);
else
sprintf(s_out, "\tWriter [%d]: %s\n ", -nReader, info);
// 打印
printf(s_out);
// 然后等待
Sleep(wait_time);
}
// 这是主函数
void TryReaderAndWriter()
{
// 创建信号量 这是初值--+ +----这是最大信号量值
读者——写者问题
#include <stdlib.h>
#include <windows.h>
#include "Reader-Writer.h "
#include "Semaphore.h "
// 这是 Windows 下多线程工作的 P 操作
#define P(S) WaitForSingleObject(S, INFINITE)
// 这是 Windows 下多线程工作的 V 操作
#define V(S) ReleaseSemaphore(S, 1, NULL)
const int RN = 5; // 所有读者总数
const int WN = 3; // 所有写者总数
HANDLE Sdoc; // 文档信号量——互斥量
HANDLE Sr; // 读者信号量——广义信号量
HANDLE Scnt; // 保护 g_cntReader 的互斥量
int g_cntReader = 0; // 读者个数计数器
// ##############+. Descripted By Tang Houjian [2003-9-26 20:10:49] .+##########
// | funcname : JustWait ( )
// + note : 显示一些信息,让后等待
// |
// +-----------------------------+
// | ret val : void
// |
// + Parameter :
// | [ int ] - nReader 读者(写者)编号,读者> 0,写者 <0
// | [ int ] - min 操作等待的最短时间
// | [ int ] - max 操作等待得最长时间,实际等待的时间介于两者之间
// | [ LPCSTR ] - info 要显示的信息
void JustWait(int nReader, int min, int max, LPCSTR info)
// +-----------------------------+
{
// 等待时间的基本量,以毫秒表示
const int BASETIME = 1000;
// 实际等待得时间
int wait_time = 0;
if (max==min) // 判断是为了避免 %0错误,注意取随机值
wait_time = min*BASETIME;
else
wait_time = rand()%(max*BASETIME-min*BASETIME) + min*BASETIME; </P < p>
// 最终显示的信息缓冲
char s_out[128];
// 读者大于0,写者小于0
if (nReader > 0)
sprintf(s_out, "Reader [%d]: %s\n ", nReader, info);
else
sprintf(s_out, "\tWriter [%d]: %s\n ", -nReader, info);
// 打印
printf(s_out);
// 然后等待
Sleep(wait_time);
}
// 这是主函数
void TryReaderAndWriter()
{
// 创建信号量 这是初值--+ +----这是最大信号量值