社区
进程/线程/DLL
帖子详情
我想防止函数重入,应怎么办?
dylwx
2003-06-02 10:00:40
CCriticalSection是不行的,因为是同一线程,它不起作用
...全文
319
23
打赏
收藏
我想防止函数重入,应怎么办?
CCriticalSection是不行的,因为是同一线程,它不起作用
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
晨星
2003-06-07
打赏
举报
回复
哦,总算明白了。
递归不可能加锁呀,否则就递归不下去了呀。
肯定是你的递归设计又问题,要么就是不适合使用递归。
ahao
2003-06-07
打赏
举报
回复
你在消息处理函数里调用SendMessage发送同一消息,是可能重入
孤必有邻
2003-06-07
打赏
举报
回复
解决问题的方向不对!
dylwx
2003-06-06
打赏
举报
回复
就是递归调用。
虽然我的程序没有直接设计递归调用,但是我放置测试语句时发现的确存在重入问题。
我猜想Windows的消息机制有可能在同一线程中造成递归调用
Zark
2003-06-06
打赏
举报
回复
的确让人迷糊,既然是同一个线程,又怎么会同时调用同一个函数?倒底是谁和谁同时调用这一个"可怜"的函数?
ahao
2003-06-05
打赏
举报
回复
奇怪的问题
dylwx
2003-06-05
打赏
举报
回复
!!!
dylwx
2003-06-05
打赏
举报
回复
当然不算,只要没有执行到关键代码就不算重入。
用局部变量,肯定先判断,如果符合执行条件,马上修改变量值,使得别的调用不能进入,万一两次调用同时到达判断语句,那不是就重入了吗?
信号灯等机制可以,互斥体不行(同一线程的原因),我提问时的问题是别的原因引起的,该问已经解决。
thundered
2003-06-03
打赏
举报
回复
如果是在同一个线程内,最简单的就是定义一个bool型的静态变量,在函数的头部检查bool变量,如果为true,说明已经被调用了,否则说明没有被调用,进入把bool型变量设成true.
由于在一个线程中前后多次调用一个函数只有一种可能---是递归调用。所以可以将递归调用替换成循环,便于控制。
上面用静态变量的方法只能适用于如果已有调用,后续调用被扔掉也没有关系的逻辑,如果希望后续的调用能够排队,并且继续得到依序调用,可能可以像消息队列一样建立一张包含函数参数结构的链表,然后设置一个event对象,来手工设置,(这种方法不知在单线程中可行否?),如果不考虑效率,在同一个线程中肯定可以用不断的查询当前静态变量的方法来完成函数的排队调用。
windleee
2003-06-03
打赏
举报
回复
进入函数后再判断,这样也算重入了吧?!
jjqiao710102
2003-06-03
打赏
举报
回复
创建互斥体或信号灯
晨星
2003-06-03
打赏
举报
回复
同一线程怎么会有“重入”问题,你是指执行两次以上?那就别让它执行两次以上呀。
shuicai
2003-06-03
打赏
举报
回复
关注
wjl_2001
2003-06-03
打赏
举报
回复
创建互斥体或信号灯
joachern
2003-06-03
打赏
举报
回复
up
diyzhao
2003-06-03
打赏
举报
回复
局部变量是静态局部变量
diyzhao
2003-06-03
打赏
举报
回复
可以用一个局部变量来判断是否已执行过,如是,则跳出即可
NowCan
2003-06-03
打赏
举报
回复
判断条件的时候不是已经重入了吗,那有什么用?
Kevin_qing
2003-06-03
打赏
举报
回复
用个静态局部变量不就解决了嘛···
如果要多线程再加个锁
windbells
2003-06-02
打赏
举报
回复
创建互斥体或信号灯
加载更多回复(3)
【Linux系统编程】可
重入
和不可
重入
函数
00. 目录 文章目录00. 目录01. 不可
重入
函数
02. 可
重入
函数
03. 判断条件04. Linux常用可
重入
函数
05. 附录 01. 不可
重入
函数
在实时系统的设计中,经常会出现多个任务调用同一个
函数
的情况。如果有一个
函数
不幸被设计成为这样:那么不同任务调用这个
函数
时可能修改其他任务调用这个
函数
的数据,从而导致不可预料的后果。这样的
函数
是不安全的
函数
,也叫不可
重入
函数
。 02. 可
重入
函数
...
函数
可
重入
与不可
重入
理解
static:修饰全局变量,
函数
改变作用域 修饰 局部变量 生命周期随进程 volatile: 作用:修饰一个变量,保持变量的内存可见性 修饰变量后,cpu每次访问变量数据,都需要从内存中去获取
函数
的可
重入
与不可
重入
函数
的
重入
:一个
函数
在多个执行流程中,重复进入一个
函数
进行执行 可
重入
函数
:一个
函数
重入
之后,不会出现数据二义问题或逻辑混乱 不可
重入
函数
:一旦一个
函数
重入
之后,就有可能造成数据二义问题或逻辑混乱 基准:在一个
函数
中是否对一个全局...
什么是可
重入
函数
和不可
重入
函数
以及区别
转自:http://www.feijispace.cn/chengxu/106/
什么是可
重入
函数
和不可
重入
函数
以及区别
在 实时系统的设计中,经常会出现多个任务调用同一个
函数
的情况。如果这个
函数
不幸被设计成为不可
重入
的
函数
的话,那么不同任务调用这个
函数
时可能修改其他任 务调用这个
函数
的数据,从而导致不可预料的后果。那么什么是可
重入
性,可
重入
函数
呢?
什么是可
重入
性?
可
重入
(reentrant)
函数
可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可
构造
函数
和析构
函数
可以是虚
函数
吗?为什么?
三、构造
函数
和析构
函数
可以是虚
函数
吗?为什么? 1、构造
函数
从存储空间角度,虚
函数
对
应
一个指向vtable虚
函数
表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造
函数
是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造
函数
不能是虚
函数
。 从使用角度,虚
函数
主要用于在信息不全的情况下,能使重载的
函数
得到对
应
的调用。构造
函数
本身就是要初始化实例,那使用虚
函数
也没有实际意义呀。所以构造
函数
没有
C语言线程安全:不可
重入
函数
汇总
原址:https://vimsky.com/article/3185.html多线程程序中,线程安全是必须要考虑的因素。C语言中大部分函库
函数
都是线程安全的,但是也有几个常用
函数
是线程不安全的,也叫不可
重入
函数
。线程不安全
函数
原因浅析之所线程不安全,是因为这些系统
函数
使用了某些全局或者静态变量。我们知道,全局变量和静态变量分别对
应
内存中的全局变量区和静态存储区,这些区域都是可以跨
函数
跨线程访问的。...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章