EMZETT.
Giriş yap

Futex: Linux çekirdeğinde hızlı kilitler

Kısaca: Futex (“fast userspace mutex”), kilitlerin çoğunlukla hiç çekirdek çağrısı olmadan çalışmasını sağlayan, çekirdeği yalnızca çekişmede devreye sokan Linux yapı taşıdır.

Biraz daha ayrıntılı: Kilit, bellekte bir sayıdır. Boşsa bir iş parçacığı onu çekirdeğe sormadan atomik bir işlemle alır. Yalnızca doluysa iş parçacığı futex() sistem çağrısıyla uykuya yatar.

Ayrıntılı

  • Hızlı yol: Kullanıcı alanında atomik karşılaştır-ve-değiştir, birkaç nanosaniye.
  • Yavaş yol: FUTEX_WAIT değer değişene kadar uyur, FUTEX_WAKE bekleyenleri uyandırır.
  • Kullanıcılar: glibc’deki pthread mutex’leri, semaforlar ve koşul değişkenleri bunun üzerine kuruludur.
  • Avantaj: Çekişmesiz kilitler (olağan durum) neredeyse hiçbir şeye mal olmaz.
  • Tuzaklar: Sahte uyandırmalar, öncelik tersine çevrilmesi (öncelik mirası bunu ele alır) ve adalet.
  • Gözlem: Bir program kilit çekişmesinden muzdaripse strace çok sayıda futex çağrısı gösterir. Bkz. strace.

Ayrıca bak: Semafor