• 大小: 12KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: 多线程  同步读写  

资源简介

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

资源截图

代码片段和文件信息

#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


评论

共有 条评论