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_WAITdeğer değişene kadar uyur,FUTEX_WAKEbekleyenleri 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ıdafutexçağrısı gösterir. Bkz. strace.
Ayrıca bak: Semafor