簡體   English   中英

共享庫局部變量線程安全嗎?

[英]Is shared library local variable thread safe?

我正在開發一個多線程應用程序,該應用程序將訪問共享庫,現在我看到共享庫不包含任何全局變量,這是否意味着該庫是線程安全的? 例如。

我正在從各個線程調用函數func()到共享庫,例如:

線程1-> func()

線程2-> func()

...

線程N-> func()

並且func()定義如下,

void func(){
    int var;
    func2(&var);
}

在這種情況下,它是線程安全的嗎?

您所顯示的用法是線程安全的,因為從每個線程進行的func調用將具有變量var的副本。

但是,由於以下幾個原因,這不能保證:

  • 庫還需要注意其對static變量的使用。 如果將int var替換為static int varfunc將不再是線程安全的
  • 您在調用庫時需要小心。 如果代碼中存在與您顯示的相同模式,即,如果代碼在線程之間共享局部變量,則該代碼將不是線程安全的。
  • 該庫可能使用不是線程安全的函數,例如strtok 使用這些功能會使您的庫不是線程安全的。

是的,有問題的代碼將在每個線程的上下文中執行,並且本地自動變量通常將存儲在每個線程的堆棧中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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