如何实现互斥操作?

XqYuan 2009-07-16 06:22:07
我有两个对一个CArray进行操作的函数。一个函数是删除一条数据,一个函数是顺序依次操作所有数据
由于两个函数随时可能被调用,这样就存在正在顺序操作数据的时候不能删除的问题,应该如何解决?

两个函数如何实现互斥执行

...全文
159 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
XqYuan 2009-07-17
  • 打赏
  • 举报
回复
使用了临界区,还有问题,正在研究中...
hazrael 2009-07-16
  • 打赏
  • 举报
回复
严重同意LS的话
虽然临界区比较简单,不过似乎MS更建议使用内核对象
jamesjinyongming 2009-07-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tttyd 的回复:]
1.如果两个函数在一个线程里的话,则不需要任何附加工作,会自动按顺序调用这两个函数,不需要任何同步操作。
2.如果是多线程的话,则需要同步处理,针对资源使用CCriticalSection cs
[/Quote]
同意这个做法,先确定是不是多线程的
songtao_01 2009-07-16
  • 打赏
  • 举报
回复
CRITICAL_SECTION
biweilun 2009-07-16
  • 打赏
  • 举报
回复
用一个变量就可以了。
操作之前先判断这个信号变量的值是否允许他操作
orcyjay 2009-07-16
  • 打赏
  • 举报
回复
如果函数出口多,记得不要忘记unlock~
码侬 2009-07-16
  • 打赏
  • 举报
回复
CEvent 比较方便
  • 打赏
  • 举报
回复
临界区比较方便
雪影 2009-07-16
  • 打赏
  • 举报
回复
1.如果两个函数在一个线程里的话,则不需要任何附加工作,会自动按顺序调用这两个函数,不需要任何同步操作。
2.如果是多线程的话,则需要同步处理,针对资源使用CCriticalSection cs
oyljerry 2009-07-16
  • 打赏
  • 举报
回复
临界区等
CCriticalSection cs;
每个函数进去的时候cs.lock();,退出的时候cs.unlock();
yyswly 2009-07-16
  • 打赏
  • 举报
回复
CEvent waitACK;
waitACK.ResetEvent();
if (WAIT_TIMEOUT == WaitForSingleObject(waitACK, nTimeOut*1000))
{
..............
}



waitACK.SetEvent();
codecola 2009-07-16
  • 打赏
  • 举报
回复
用同步类,如CCriticalSection, CMutex等。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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