Thread'lenebilirlik
Global Veriler Kullanma
Global veri fonksiyonlar arasında istenmeyen yan etkilere neden olur ve kodun paralelleştirilmesini zorlaştırır veya imkansız kılar. Bugün kodun paralelleştirilmesi amaçlanmıyor olsa bile, gelecekte yapılmayacağı anlamına gelmez.
İstatistikler
Global verinin yanında, istatistikler her zaman beklediğin gibi oluşturulmaz ve yok edilmez. Bu çapraz-platform ortamlar için özellikle geçerlidir. Mesela bu g++ bug'ı dinamik modüllerden yüklenen paylaşımlı statik verinin yokedilme sırasından kaynaklanır.
Shared Pointer'lar
std::shared_ptr
, "ne kadar globalse o kadar iyidir" (http://stackoverflow.com/a/18803611/29975) çünkü kodun pek çok bölümünün aynı veriye erişmesine izin verir.
Singleton'lar
Singleton sıklıkla bir static ve/veya shared_ptr
ile implemente edilir.
Heap Operasyonlarından Kaçın
Heap operasyonları thread'lenmiş ortamlarda çok daha yavaştır. Çoğu durumda, veriyi kopyalamak daha hızlıdır.
Mutex ile mutable el ele gider (M&M kuralı, C++11)
Üye değişkenler için mutex ve mutable'ı beraber kullanmak iyi bir uygulamadır. Bu iki şekilde uygulanır:
- Bir mutable üye değişkeninin shared (paylaşılmış) bir değişken olacağı varsayılır bu yüzden bir mutex ile senkronize edilmelidir (veya atomic yapılmalıdır)
- eğer üye değişkenin kendisi bir mutex ise, mutable olmalıdır. Bu, o değişkeni const üye fonksiyon içinde kullanmak için gereklidir.
Daha fazla bilgi için Herb Sutter'ın makalesine bakınız: http://herbsutter.com/2013/05/24/gotw-6a-const-correctness-part-1-3/
const &
dönüş değerleri hakkında ilgili güvenlik tartışması için.