关于双线程访问共享FIFO的有关问题,有关问题很多求帮忙看下
关于双线程访问共享FIFO的问题,问题很多求大虾帮忙看下
本人刚学,有点菜 如不能解决 给点建议也成 分及时给
#include <windows.h>
#include <stdio.h>
#include <conio.h>
CRITICAL_SECTION g_s;
#define TRUE 1
#define FALSE 0
#define m 50
BOOL InitializeCriticalSectionAndSpinCount(
PCRITICAL_SECTION pcs, DWORD dwSpinCount);
void EnterCriticalSection(PCRITICAL_SECTION pcs);
////////////////////////////////////////////////////////////////////////////
typedef struct
{
QEle_Type elem[m];
int front;
int rear;
}SeqQueue;
void InitQueue(SeqQueue *q)
{
q->front =0;
q ->rear =0;
}
//////////////////////////////////////////////////////////////////////////////
int EnQueue (SeqQueue *q,int x)
{
if(q->rear==m)
{
printf("队列已满");
return(FALSE);
}
else
{
q->elem[q->rear]=x;
q->rear++;
return (TURE);
}
}
///////////////////////////////////////////////////////////////////////////////
int DeQueue (SeqQueue *q,int x)
{
if(q->rear == q->front)
{
printf("队空");
return(FALSE);
}
else
{
x=q->elem[q->front];
q->front++;
return x;
}
}
void LeaveCriticalSection(PCRITICAL_SECTION pcs);
////////////////////////////////////////////////////////////////////////////////
void main()
{
void InitializeCriticalSection(PCARITACAL_SECTION pcs);
DWORD WINAPI FirstThread(PVOID pvParam)
{
while ()
{
EnterCriticalSection(&g_s);
SeqQueue *Q;
int x;
InitQueue(Q);
printf("输入:\n");
scanf("%d",&x);
while(x!=0)
{
EnQueue(Q,x)
scanf("%d",&x);
}
LeaveCriticalSection(&g_s);
}
return (0);
}
DWORD WINAPI SecondThread(PVOID pvParam)
{
while ()
{
EnterCriticalSection (&g_s);
SeqQueue *Q;
int x;
InitQueue(Q);
printf("输出:\n");
while(x=DeQueue(Q,x))
{
printf("%2d",x);
}
printf("\n");
LeaveCriticalSection (&g_s);
}
return(0);
}
}
------解决方案--------------------
你这个根本都不是多线程吧??
多线程,起码要多啊。。
WINDOWS, CreatThread
------解决方案--------------------
貌似只有一个主线程吧,还没有创建其他的线程呢...
------解决方案--------------------
你的子线程创建在那里?
------解决方案--------------------
没有CreateThread等等……
------解决方案--------------------
lz想干嘛
本人刚学,有点菜 如不能解决 给点建议也成 分及时给
#include <windows.h>
#include <stdio.h>
#include <conio.h>
CRITICAL_SECTION g_s;
#define TRUE 1
#define FALSE 0
#define m 50
BOOL InitializeCriticalSectionAndSpinCount(
PCRITICAL_SECTION pcs, DWORD dwSpinCount);
void EnterCriticalSection(PCRITICAL_SECTION pcs);
////////////////////////////////////////////////////////////////////////////
typedef struct
{
QEle_Type elem[m];
int front;
int rear;
}SeqQueue;
void InitQueue(SeqQueue *q)
{
q->front =0;
q ->rear =0;
}
//////////////////////////////////////////////////////////////////////////////
int EnQueue (SeqQueue *q,int x)
{
if(q->rear==m)
{
printf("队列已满");
return(FALSE);
}
else
{
q->elem[q->rear]=x;
q->rear++;
return (TURE);
}
}
///////////////////////////////////////////////////////////////////////////////
int DeQueue (SeqQueue *q,int x)
{
if(q->rear == q->front)
{
printf("队空");
return(FALSE);
}
else
{
x=q->elem[q->front];
q->front++;
return x;
}
}
void LeaveCriticalSection(PCRITICAL_SECTION pcs);
////////////////////////////////////////////////////////////////////////////////
void main()
{
void InitializeCriticalSection(PCARITACAL_SECTION pcs);
DWORD WINAPI FirstThread(PVOID pvParam)
{
while ()
{
EnterCriticalSection(&g_s);
SeqQueue *Q;
int x;
InitQueue(Q);
printf("输入:\n");
scanf("%d",&x);
while(x!=0)
{
EnQueue(Q,x)
scanf("%d",&x);
}
LeaveCriticalSection(&g_s);
}
return (0);
}
DWORD WINAPI SecondThread(PVOID pvParam)
{
while ()
{
EnterCriticalSection (&g_s);
SeqQueue *Q;
int x;
InitQueue(Q);
printf("输出:\n");
while(x=DeQueue(Q,x))
{
printf("%2d",x);
}
printf("\n");
LeaveCriticalSection (&g_s);
}
return(0);
}
}
------解决方案--------------------
你这个根本都不是多线程吧??
多线程,起码要多啊。。
WINDOWS, CreatThread
------解决方案--------------------
貌似只有一个主线程吧,还没有创建其他的线程呢...
------解决方案--------------------
你的子线程创建在那里?
------解决方案--------------------
没有CreateThread等等……
------解决方案--------------------
lz想干嘛