社区
进程/线程/DLL
帖子详情
以下哪些函数是线程安全的?
w_anthony
2008-02-27 10:33:07
windows和linux下,sprint,sscanf,strlen,strcpy,strcmp,memcpy,memcmp,atoi,printf,scanf是否线程安全?
请指点一下,我找不到介绍说明。
ps:
是不是除了printf和scanf都是线程安全的?如果有介绍网址提供,那就更好了!
...全文
1751
24
打赏
收藏
以下哪些函数是线程安全的?
windows和linux下,sprint,sscanf,strlen,strcpy,strcmp,memcpy,memcmp,atoi,printf,scanf是否线程安全? 请指点一下,我找不到介绍说明。 ps: 是不是除了printf和scanf都是线程安全的?如果有介绍网址提供,那就更好了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
njusthsy
2012-05-04
打赏
举报
回复
gcc下都是线程安全的,但不是可重入的
scq2099yt
2008-03-04
打赏
举报
回复
都不安全
hwsts2
2008-02-29
打赏
举报
回复
在多线程 版本下 理论都是安全的
pkw1155402
2008-02-27
打赏
举报
回复
对这方面没有研究过,亲听各位高手的解说。偷学。。呵呵~~
jwybobo2007
2008-02-27
打赏
举报
回复
感觉所说的线程安全其实就是数据的安全,如果同时有N个相同线程运行的话可能会出现内存访问的问题,感觉只要对关键代码进行保护,进行线程同步处理可以避免错误的发生。
w_anthony
2008-02-27
打赏
举报
回复
我多线程的程序输出调试信息都是printf的,拷贝数据都是要strcpy,memcpy,比较数据都是strcmp,strcmp,单只是自己的函数是线程安全又有什么用?两个不同函数同时调用printf不还是不能互斥?
如果这些函数确实不是线程安全的,我就要自己写一个函数包装这些库函数作互斥。但是偏偏我测试没有出问题啊!
有一点可以确定的是vc选MT或者MTd的话,这些函数全都变成线程安全了,就是不知道gcc加了-pthread之后就也是线程安全的了。
r_swordsman
2008-02-27
打赏
举报
回复
这些基本的函数不可能是线程安全的,
因为要保证线程安全是需要好多额外代码的。
所以lz需要做的是保证自己的类或函数是线程安全的即可。
r_swordsman
2008-02-27
打赏
举报
回复
_s 类是针对内存泄露的安全,不是线程安全。
cnzdgs
2008-02-27
打赏
举报
回复
多线程共同访问全局对象时应该考虑的是线程同步问题,避免访问时发生冲突。
zhoujianhei
2008-02-27
打赏
举报
回复
线程安全都是骗人的,楼主不要轻信。
w_anthony
2008-02-27
打赏
举报
回复
我什么时候认为printf和scanf都是线程安全的了?我是100000次循环没测试出线程不安全,所以混乱了……
r_swordsman
2008-02-27
打赏
举报
回复
你为什么认为printf和scanf都是线程安全的?
w_anthony
2008-02-27
打赏
举报
回复
wltg2001可以说说怎么使用多线程的运行时库么?主要是gcc下面,是不是加了-pthread编译参数,就已经是线程安全的了?我的100000次printf都没有出错……
w_anthony
2008-02-27
打赏
举报
回复
我vc下试过开两个线程作100000次printf,结果确实会出错,但如果选多线程调试MTd的话则不会出错,似乎是自动选用线程安全的同名库函数方式进行编译了。
在linux下用gcc编译,也做100000次printf,运行正常。
因此搞不清到底是不是线程安全的了。
我个人认为,除了printf和sscanf都是对stdin做操作,因此可能会出问题,其他几个函数似乎没有什么内存是公用的,真不知道到底是不是线程安全的了。
至于scanf_s这类的,gcc没有,没办法用。我这个程序主要还是要放在Linux下用的。
TieShou
2008-02-27
打赏
举报
回复
都是不安全的,VC 2005里面会有警告。
安全的后面都有 _s
scanf_s ...
wltg2001
2008-02-27
打赏
举报
回复
应该多是线程安全,前提是你要用多线程的运行时库
cnzdgs
2008-02-27
打赏
举报
回复
这些函数都是不安全的。
cnzdgs
2008-02-27
打赏
举报
回复
LZ说的线程安全是指什么?
w_anthony
2008-02-27
打赏
举报
回复
自己顶一下
wgm001
2008-02-27
打赏
举报
回复
帮顶下吧!
加载更多回复(4)
Linux线程(7)——
线程安全
函数
线程安全
函数
了解了可重入
函数
之后,再来看看
线程安全
函数
。 一个
函数
被多个线程(其实也是多个执行流,但是不包括由信号处理
函数
所产生的执行流)同时调用时,它总会一直产生正确的结果,把这样的
函数
称为
线程安全
函数
。
线程安全
函数
包括可重入
函数
,可重入
函数
是
线程安全
函数
的一个真子集,也就是说可重入
函数
一定是
线程安全
函数
,但
线程安全
函数
不一定是可重入
函数
,它们之间的关系如下: 譬如下面这个
函数
是一个不可重入
函数
,同样也是一个线程不安全
函数
(上篇最后一例):
什么是
线程安全
?
线程安全
“
线程安全
”的定义: 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象时
线程安全
的。 该定义要求
线程安全
的代码都必须具备一个共同特征: 代码本身封装了所有必要的正确性保障手段(如互斥同步等),令调用者无须关心多线程下的调用问题,更无须自己实现任何措施来保证多线程环境下的正确调用。 java语言中的
线程安全
线程安全
,将以多个线程之间存在共享数据访问
14.
线程安全
?线程不安全?可重入
函数
?不可重入
函数
?
线程安全
问题 基本定义
线程安全
:简单来说
线程安全
就是多个线程并发执行同一段代码时,不会出现不同的结果,我们就可以说该线程是安全的; 线程不安全:如果多线程并发执行时会产生不同的结果,则该线程就是不安全的。
线程安全
产生的原因:大多是因为对全局变量和静态变量的操作。 常见的线程不安全的
函数
: (1)不保护共享变量的
函数
(2)
函数
状态随着被调用,状态发生变化的
函数
(3)返回指向静...
C库
函数
中哪些是
线程安全
的,哪些不是
线程安全
的?
首先先明白什么样的
函数
不是
线程安全
的:使用多个thread共享的全局或静态变量;
函数
中调用了非thread_safe的子
函数
。 C库
函数
中的
线程安全
性 在 ARM 库中,
函数
可能是
线程安全
的,如下所示: 某些
函数
从来都不是
线程安全
的,示例setlocale() 某些
函数
在本质上就是
线程安全
的,示例memcpy() 某些
函数
(示例malloc())可通过实现...
线程安全
函数
是什么
什么是
线程安全
? 一个
函数
被多个并发线程反复调用时,它会一直产生正确的结果,则该
函数
是
线程安全
函数
。 那么什么又是可重入
函数
? 当一个
函数
在被一个线程调用时,可以允许被其他线程再调用。即两个
函数
“同时”发生。则该
函数
是可重入
函数
。 所以,显而易见,如果一个
函数
是可重入的,那么它肯定是
线程安全
的。但反之未然,一个
函数
是
线程安全
的,却未必是可重入的。比如我...
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章