资源简介
使用多线程实现同步读写的一个小程序,同时开启读线程和写线程。当写线程写入一个数字时,读线程读取该数字。
代码片段和文件信息
#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的语音增强的经典论文-谱减法
相关资源
- 多线程Socket.
- 多线程统计多个文件的单词数目
- 线程间通信方式3:消息传递方式
- 图片图片工具——TinyPng多线程压缩
- QUdpSocket 多线程编程 moveToThread
- qt udp多线程收发数据
- htran.exe 多线程包转发工具
- 超级多线程百度baidu ping.rar
- delphi多线程批量
- ScanPort 多线程源代码
- QthreadPools.rar
- pthread多线程计算pi
- BCB多线程BCB多线程
- Linux课程设计多线程聊天,有图形界面
- linux多线程实现矩阵乘法
- 多线程sock5代理
- 基于Qt的多线程工具
- 睡觉的理发师问题Linux下运行
- QTcpServer实现多客户端连接
- 多线程下无同步和同步的简单对比
- TCP多线程服务器
- 可以查看多线程cpu占用率的工具
- Linux下多线程判断九宫格是否有效
- 消消乐自动求解
- libevent多线程
- 多线程字符串代码文件搜索器
- 多线程读者阅览室课程设计
- 多线程自动化syn&udp flood攻击集成工具
- 实现一个数据单元,包括学号和姓名
- vc定时器和多线程的简单应用
评论
共有 条评论