strcmp对线程安全吗?

时间:2010-12-06 09:53:34

标签: c multithreading thread-safety pthreads

strcmp(variable, "constant");

或者我是否必须使用互斥锁保护它?

5 个答案:

答案 0 :(得分:4)

如果变量可以被其他线程修改,则必须保护它。这里没有魔法 - 更高级别的语言可以原子地执行这样的函数调用,这是C中不存在的“魔法”。

请注意,保护(通过单个锁)需要'变量'指针值(内存中字符串的地址)和字符串本身(注意:它也可以被其他指针引用)。如果在'strcmp'运行时修改了字符串,则可能会出现错误结果或缓冲区溢出和分段错误。

答案 1 :(得分:2)

锁定保护数据,而不是代码。

由于strcmp无法知道您可能使用什么锁来保护variable,因此无法获取该锁,因此该函数不是“线程安全的”感觉你可能意味着。

答案 2 :(得分:1)

如果共享变量,则需要保护对变量的访问权限 调用strcmp的多个线程本身是安全的(功能明智),因为strcmp只是比较2个字符串而不做任何修改。
但是,因为当strcmp正在运行时,variable可能已被其他线程更改,修改可能会在其操作期间中断strcmp,因此您应该保护它以及您访问的所有其他位置{{1 }}

答案 3 :(得分:0)

这很安全。参数和任何内部变量都在堆栈上,因此与可能调用相同函数的任何其他线程的内存不同。

答案 4 :(得分:0)

请看这里:http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html

POSIX中有一个线程不安全的函数列表。因此至少在POSIX strcmp()上是线程安全的。