[英]Is it thread-safe to strcmp?
strcmp(variable, "constant");
還是我必須用互斥鎖來保護它?
如果變量可以被其他線程修改,你必須保護它。 這里沒有魔法——高級語言可以原子地執行這樣的函數調用,這就是 C 中不存在的“魔法”。
請注意,保護(通過單個鎖)需要“變量”指針值(內存中字符串的地址)和字符串本身(注意:它也可以被其他指針引用)。 如果在“strcmp”運行時修改了字符串,您可能會得到錯誤結果或緩沖區溢出和分段錯誤。
鎖保護的是數據,而不是代碼。
由於strcmp
無法知道您可能使用什么鎖來保護variable
,因此它不可能獲得該鎖,因此該函數在您可能的意思上不是“線程安全的”。
如果變量是共享的,則需要保護對變量的訪問。
多個線程調用 strcmp 本身是安全的(功能方面),因為 strcmp 只比較兩個字符串並且不做任何修改。
但是由於在 strcmp 運行時該variable
可能已被其他線程更改,因此修改可能會在其操作期間破壞 strcmp ,因此您應該保護它以及您訪問variable
所有其他地方。
它是安全的。 參數和任何內部變量都在堆棧上,因此與可能調用同一函數的任何其他線程不同的內存。
看這里: http : //www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html
POSIX 中有一個線程不安全函數列表。 因此,至少在 POSIX strcmp()
上它是線程安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.