这个同步怎么样实现?

sxxny 2004-07-09 01:40:22
现在有以下函数:
fun_wait()

fun1(), fun2(), fun3(), fun4(), fun5();

要求是这样的:
所有的函数都有可能被多线程同时调用,
现在要求: fun_wait()调用的时候,fun1~fun5一定不能够有函数在调用.
fun1~fun5本身可以被多个线程调用而不阻塞.
...全文
134 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_ding 2004-07-10
  • 打赏
  • 举报
回复
CRITICAL_SECTION cs1, cs2, cs3, cs4, cs5;

// initialize
InitializeCriticalSection(&cs1);
...
// delete
DeleteCriticalSection(&cs1);
...

void fun1()
{
::EnterCriticalSection(cs1);
...
::LeaveCriticalSection(cs1);
}

............

void fun5()
{
::EnterCriticalSection(cs5);
...
::LeaveCriticalSection(cs5);
}

void fun_wait()
{
::EnterCriticalSection(cs1);
::EnterCriticalSection(cs2);
::EnterCriticalSection(cs3);
::EnterCriticalSection(cs4);
::EnterCriticalSection(cs5);
...
::LeaveCriticalSection(cs5);
::LeaveCriticalSection(cs4);
::LeaveCriticalSection(cs3);
::LeaveCriticalSection(cs2);
::LeaveCriticalSection(cs1);
}
sxxny 2004-07-10
  • 打赏
  • 举报
回复
不能
unchallenger 2004-07-10
  • 打赏
  • 举报
回复
可能死锁的说......
unchallenger 2004-07-10
  • 打赏
  • 举报
回复
fun_wait(WaitForMutipleObject(*****))

fun1(WaitForSingleObject(fun_wait_evevt,INFINIT);),
fun2(WaitForSingleObject(fun_wait_evevt,INFINIT);),
fun3(WaitForSingleObject(fun_wait_evevt,INFINIT);),
fun4(WaitForSingleObject(fun_wait_evevt,INFINIT);),
fun5(WaitForSingleObject(fun_wait_evevt,INFINIT););

这样可以吗??
ShaftWhy 2004-07-09
  • 打赏
  • 举报
回复
楼主,fun1--fun5运行时,fun_wait能运行吗?
gunj 2004-07-09
  • 打赏
  • 举报
回复
能不能设置一个全局变量,其中只能由fun_wait()来控制,在调用fun_wait()时设为false,函数运行完设置为true,当线程要调用fun1~fun5时,做判断,false则fun1~fun5不执行.
但有问题的是,当fun1~fun5在运行时,如何来让fun_wait()运行?
sxxny 2004-07-09
  • 打赏
  • 举报
回复
up
sxxny 2004-07-09
  • 打赏
  • 举报
回复
能具体点吗
我琢磨了半天了,
好象不是那么简单
ahyf 2004-07-09
  • 打赏
  • 举报
回复
fun_wait() 对 其它的加锁
sxxny 2004-07-09
  • 打赏
  • 举报
回复
在Windows下面运行

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧