首頁 >後端開發 >C++ >你能在 C 11 中建立一個線程安全的單例而不使用 `` 嗎?

你能在 C 11 中建立一個線程安全的單例而不使用 `` 嗎?

DDD
DDD原創
2024-10-30 02:34:29293瀏覽

Can You Create a Thread-Safe Singleton in C  11 Without Using ``?

如何在C 11 中不使用 實現多線程安全單例

簡介

自從引入多執行緒以來,在C 11 中實作執行緒安全單例一直是爭論的話題。雖然互斥體提供了一種實現執行緒安全的直接方法,但它們會帶來效能開銷。本文探討了一種在不使用互斥體的情況下實作多執行緒安全單例的替代方法。

帶有並發等待的延遲初始化

C 11 引入了一項新的語言功能,可以簡化實現惰性初始化。如果靜態局部變數已初始化,並發執行現在將等待,從而無需手動鎖定。

實作

擷取單例實例的簡單靜態函數可以如下實現:

<code class="cpp">static Singleton& get() {
  static Singleton instance;
  return instance;
}</code>

只要編譯器正確實現該標準,此函數將在C 11 中提供正確的行為。

阻止單例

儘管實現了這種簡化,但作者強調,通常不鼓勵使用單例。由於其固有的局限性,他們主張完全避免單例。

附加說明

  1. 原始程式碼中提到的clear()函數用於測試和不應包含在現實世界的單例實作中。
  2. 專家提供的回應中未引用原子庫。
  3. 問題中包含的程式碼範例未在問題中進行分析回覆。

以上是你能在 C 11 中建立一個線程安全的單例而不使用 `` 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn