23 Ekim 2016 Pazar

Reentrancy - Side Effect


Merhabalar, bu yazıda Reentrancy(evrensellik) ve Side effect(yan etki) terimlerine değineceğim.

Reentrance fonksiyon nedir?

Bu fonksiyonlar olası sinyal, hata oluşumlarında sonlansa bile dış dünyaya bir etkisi(side effect) olmayan fonksiyonlardır. Yani sinyal gelse ve bu fonksiyon tekrar çağrılırsa ilk seferki gibi çalışmalı.

Reentrant şartları nelerdir?


  1. Herhangi bir static veya global değişken kullanılmamalı.
  2. Kendi yapısını/kodunu değiştirememeli.(İşletim sistemi tarafında)
  3. Non-reentrant bir fonksiyonu çağırmamalı.



int
g_var = 1; int f() { g_var = g_var + 2; // global degisken kullanmis return g_var; } int g() { return f() + 2; } Yuk


Yukarıdaki f fonksiyonunda hata olursa ve bir daha çağırılırsa bu fonksiyon eskisi gibi çalışamaz. Çünkü global bir değişkeni değiştirmiş olabilir.

int f(int i)
{
    return i + 2;
}

int g(int i)
{
    return f(i) + 2;
}


Bu örnekte ise global değişim kullanımı yok. Her çağırmada aynı çalışıp, side effect oluşturmayacaktır.