簡體   English   中英

strcmp 是線程安全的嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM