为了账号安全,请及时绑定邮箱和手机立即绑定

请问有没有简单的语句放在这两句语句前后另其简单上锁?

请问有没有简单的语句放在这两句语句前后另其简单上锁?

C++
慕容森 2023-03-02 18:14:01
现在我在c++ project里面定义了一个队列。 并且有两个函数,一个函数负责进队列,一个函数负责读队列。 第一个进队列的函数,是已经存在dll,并且我可以直接调用的callback函数,作用就是一有新信息传送到电脑,就会把数据塞进队列。 我唯一做的编辑就是在callback里面加入queue.push。 第二个queue.pop是我自己写的一个函数,并且完成了一些数据处理。 现在复杂的就是,我并没有在c++ 内定义线程,而是把这个工程生成dll,并且在c#内调用这个dll. 用一个timer去启动第二个函数, 第一个函数由于在c++内已经定义好了,也是一个随时会启动的函数。所以在一定意义上,他们就是个多线程。 现在为了queue的数据安全,我需要在c++里加入mutex,所以我现在要对queue上锁,请问我应该用什么语句。函数1里是queue.push()函数2里是queue.pop();
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

在所有的函数中这样操作:
加锁
进行任务队列操作
完成任务队列操作
........或者其他什么操作,反正知道是涉及到两个队列的操作,全部放在锁中间
解锁
只要别在两个队列操作时分别加锁, 这样就不会有任何问题

查看完整回答
反对 回复 2023-03-06
?
千万里不及你

TA贡献1784条经验 获得超9个赞

CRITICAL_SECTION m_lock;
InitializeCriticalSection(&m_lock);//初始化

//加锁 

EnterCriticalSection(&m_lock);

queue.push()
LeaveCriticalSection(&m_lock);

EnterCriticalSection(&m_lock);

queue.pop();

LeaveCriticalSection(&m_lock);


查看完整回答
反对 回复 2023-03-06
  • 2 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信