资源简介
使用多线程实现同步读写的一个小程序,同时开启读线程和写线程。当写线程写入一个数字时,读线程读取该数字。

代码片段和文件信息
#include
#include
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(NULLFALSENULL);
// g_hFullSemaphore = CreateSemaphore(NULLSIZE_OF_BUFFER-1SIZE_OF_BUFFER-1NULL);
// g_hEmptySemaphore = CreateSemaphore(NULL0SIZE_OF_BUFFER-1NULL);
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 {
hThreads[i]=CreateThread(NULL0WriteNULL0&Write_Thread_ID[i]);
}
//创建读线程
for(int j=0;j {
hThreads[WRITE_COUNT+j]=CreateThread(NULL0ReadNULL0&Read_Thread_ID[i]);
}
//回车后终止运行
while(g_continue)
{
if(getchar())
{
g_continue =false;
}
}
return 0;
}
//写一个字符
void Write_number()
{
cout<<“we write the number is : “< //把字符放入缓冲区
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 : “< }
//写线程
DWORD WINAPI Write(LPVOID lpPara)
{
while(g_continue)
{
// WaitForSingleobject(g_hFullSemaphoreINFINITE);
WaitForSingleobject(g_hMutexINFINITE);
Write_number();
Sleep(10);
ReleaseMutex(g_hMutex);
// ReleaseSemaphore(g_hEmptySemaphore1NULL);
}
return 0;
}
//读线程
DWORD WINAPI Read(LPVOID lpPara)
{
while(g_continue)
{
// WaitForSingleobject(g_hEmptySemaphoreINFINITE);
WaitForSingleobject(g_hMutexINFINITE);
Get_number();
Sleep(10);
ReleaseMutex(g_hMutex);
// ReleaseSemaphore(g_hFullSemaphore1NULL);
}
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4326 2009-05-05 17:18 read_write\read_write.dsp
文件 543 2009-05-05 16:29 read_write\read_write.dsw
文件 41984 2009-05-05 21:31 read_write\read_write.ncb
文件 49664 2009-05-05 21:31 read_write\read_write.opt
文件 1265 2009-05-05 21:30 read_write\read_write.plg
文件 2482 2009-05-05 21:30 read_write\test.cpp
目录 0 2009-05-05 21:33 read_write
----------- --------- ---------- ----- ----
100264 7
- 上一篇:verilog汽车尾灯
- 下一篇:Boll的语音增强的经典论文-谱减法
相关资源
- 编写简单的RMI程序 多线程web 服务器
- 多线程生产者消费者模式
- 多线程实例:桌面智能弹球小游戏
- WPF多线程演示
- 易语言:多线程传多变量的最稳定方
- 排队买票多线程问题
- 强大的完善的 活动抽奖系统适合各单
- 十字路口红绿灯交通情况模拟
- Qt 多线程连接数据库——数据库
- 易语言多线程端口扫描源码
- POSIX多线程程序设计中文版源码
- 易语言md5定向爆破源码
- 多线程扫描工具
- Delphi.High.Performance.Applications.Concurren
- Qt5的多线程小程序,实现按钮开关线
- 控制台串口通信程序
- POSIX多线程程序设计中文版pdf
- 使用多线程及图像分块实现图像处理
- 图像处理中使用多线程及图像分块实
- p2p文件共享系统 含代码和文档
- 武汉理工大学面向对象与多线程综合
- 多线程编程指南[中文完整翻译版] –
- QT多线程实现图片以缩略图形式显示
- qt利用线程实现多任务
- 基于socket的多线程QQ聊天系统(代码
- UDP socket 多线程
- linux多线程编程书籍
- 串口通信+多线程+数据错乱自动恢复
- VC五子棋源代码 想要的速度下哦 多线
- 多核多线程技术 (高清 带书签) (
评论
共有 条评论