strcmp(variable, "constant");
或者我是否必须使用互斥锁保护它?
答案 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()
上是线程安全的。