#include <windows.h>
#include <iostream>
const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度
int g_buffer[SIZE_OF_BUFFER]; //缓冲区
unsigned short in =0;
unsigned short out =0;
HANDLE g_hMutex;
HANDLE g_hFullSemaphore; //当缓冲区满时迫使生产者等待
HANDLE g_hEmptySemaphore; //当缓冲区空时迫使消费者等待
bool g_continue = true; //控制程序结束
int in_number = 0;
int out_number =0;
DWORD WINAPI Write(LPVOID lpPara);
DWORD WINAPI Read(LPVOID lpPara);
using namespace std;
int main()
{
//创建互斥信号
g_hMutex= CreateMutex(NULL,FALSE,NULL);
// g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);
// g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL);
const unsigned short WRITE_COUNT =1; //写的个数
const unsigned short READ_COUNT =1; //读的个数
const unsigned short THREADS_COUNT =WRITE_COUNT+READ_COUNT;//总线程个数
HANDLE hThreads[THREADS_COUNT]; //线程句柄
DWORD Write_Thread_ID[WRITE_COUNT]; //写线程的标识符
DWORD Read_Thread_ID[READ_COUNT]; //读线程的标识符
//创建写线程
for(int i=0;i<WRITE_COUNT;i++)
{
hThreads[i]=CreateThread(NULL,0,Write,NULL,0,&Write_Thread_ID[i]);
}
//创建读线程
for(int j=0;j<READ_COUNT;j++)
{
hThreads[WRITE_COUNT+j]=CreateThread(NULL,0,Read,NULL,0,&Read_Thread_ID[i]);
}
//回车后终止运行
while(g_continue)
{
if(getchar())
{
g_continue =false;
}
}
return 0;
}
//写一个字符
void Write_number()
{
cout<<"we write the number is : "<<in_number<<endl;
//把字符放入缓冲区
g_buffer[in]=in_number;
in=(in+1)%SIZE_OF_BUFFER;
in_number++;
}
//读一个字符
void Get_number()
{
out_number =g_buffer[out];
out=(out+1)%SIZE_OF_BUFFER;
cout<<"we get the number is : "<<out_number<<endl;
}
//写线程
DWORD WINAPI Write(LPVOID lpPara)
{
while(g_continue)
{
// WaitForSingleObject(g_hFullSemaphore,INFINITE);
WaitForSingleObject(g_hMutex,INFINITE);
Write_number();
Sleep(10);
ReleaseMutex(g_hMutex);
// ReleaseSemaphore(g_hEmptySemaphore,1,NULL);
}
return 0;
}
//读线程
DWORD WINAPI Read(LPVOID lpPara)
{
while(g_continue)
{
// WaitForSingleObject(g_hEmptySemaphore,INFINITE);
WaitForSingleObject(g_hMutex,INFINITE);
Get_number();
Sleep(10);
ReleaseMutex(g_hMutex);
// ReleaseSemaphore(g_hFullSemaphore,1,NULL);
}
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
一个多线程同步读写的小程序
共6个文件
dsp:1个
ncb:1个
cpp:1个
3星 · 超过75%的资源 需积分: 49 32 下载量 115 浏览量
2009-05-18
15:39:03
上传
评论
收藏 12KB RAR 举报
温馨提示
使用多线程实现同步读写的一个小程序,同时开启读线程和写线程。当写线程写入一个数字时,读线程读取该数字。
资源推荐
资源详情
资源评论
收起资源包目录
.rar (6个子文件)
read_write
read_write.opt 49KB
read_write.dsw 543B
read_write.plg 1KB
test.cpp 2KB
read_write.dsp 4KB
read_write.ncb 41KB
共 6 条
- 1
资源评论
- zhangyuan_2792012-08-09好像是C++ 做的, 不懂啊! 我用C#
- Xx123g2014-09-24虽然没有什么帮助 ,不过初学者可以看看
chichismile
- 粉丝: 0
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功