当有很多模块对一个缓冲区进行读写时,结构应该怎么设计
当有很多模块对一个缓冲区进行读写时,结构应该如何设计
如题
但是这些读写过程是按照一定的顺序关系进行而不是同时进行的,就怕当一个过程没有完成时另一模块又开始读写和计算
这个结构该如何设计呢
------解决方案--------------------
如果你的“模块”不是多线程,不用考虑这个问题;如果是多线程,用互斥量来控制。
------解决方案--------------------
对缓冲区的操作进行锁定,对读写都要锁定。
CBuff
{
XXX IN()
{
//锁定
IN 操作
//解锁
};
xxx Out()
{
//锁定
out操作
//解锁
}
};
------解决方案--------------------
但是这些读写过程是按照一定的顺序关系进行而不是同时进行的
=========
既然这样就不用考虑其它的了
------解决方案--------------------
最简单的同步
定义:
CRITICAL_SECTION cs;
使用前:
InitializeCriticalSection(&cs) ;
程序退出时:
DeleteCriticalSection (&cs) ;
使用:
void myFunc(){
EnterCriticalSection (&cs) ;
//do your job
LeaveCriticalSection (&cs) ;
}
void myFunc222(){
EnterCriticalSection (&cs) ;
//do your job
LeaveCriticalSection (&cs) ;
}
如题
但是这些读写过程是按照一定的顺序关系进行而不是同时进行的,就怕当一个过程没有完成时另一模块又开始读写和计算
这个结构该如何设计呢
------解决方案--------------------
如果你的“模块”不是多线程,不用考虑这个问题;如果是多线程,用互斥量来控制。
------解决方案--------------------
对缓冲区的操作进行锁定,对读写都要锁定。
CBuff
{
XXX IN()
{
//锁定
IN 操作
//解锁
};
xxx Out()
{
//锁定
out操作
//解锁
}
};
------解决方案--------------------
但是这些读写过程是按照一定的顺序关系进行而不是同时进行的
=========
既然这样就不用考虑其它的了
------解决方案--------------------
最简单的同步
定义:
CRITICAL_SECTION cs;
使用前:
InitializeCriticalSection(&cs) ;
程序退出时:
DeleteCriticalSection (&cs) ;
使用:
void myFunc(){
EnterCriticalSection (&cs) ;
//do your job
LeaveCriticalSection (&cs) ;
}
void myFunc222(){
EnterCriticalSection (&cs) ;
//do your job
LeaveCriticalSection (&cs) ;
}