Skip to content

volatile Yetmez: C'de Eşzamanlılık, MMIO ve _Atomic#134

Open
Mavrikant wants to merge 1 commit into
masterfrom
post/2026-06-13-volatile-yetmez-c-atomic
Open

volatile Yetmez: C'de Eşzamanlılık, MMIO ve _Atomic#134
Mavrikant wants to merge 1 commit into
masterfrom
post/2026-06-13-volatile-yetmez-c-atomic

Conversation

@Mavrikant

Copy link
Copy Markdown
Owner

Konu ve seçim gerekçesi

Konu: `volatile` ile `_Atomic` arasındaki gerçek farkı, C11 bellek modelini ve
ARM weakly-ordered hafıza modelini somut derleyici çıktısı üzerinden anlatmak.

Neden bu konu?

  • Alan rotasyonu: Son 5 yazı sırasıyla yazılım tasarımı (coupling),
    navigasyon/füzyon (Kalman), sistem mühendisliği, RF/DSP (bandpass) ve gömülü/SoC
    (Renode) alanlarındaydı. Düşük seviye C / bellek modeli son ~6 ayda hiç
    işlenmemişti.
  • Yazara değer: Aviyonik / DO-178C bağlamında multi-core kullanımı artıyor;
    `volatile` yanılgıları emniyet kritik kodda gerçek hatalara yol açıyor.

Derinlik öğesi (Bölüm 7)

Bellek/assembly incelemesi. Aynı C kodunun beş farklı versiyonunu (sıradan,
`volatile`, `_Atomic seq_cst`, `_Atomic release`, ve ARMv7-A için `_Atomic`)
gcc -O2 ile derleyip emit edilen `str` / `stlr` / `dmb ish` komutlarını
karşılaştırıyor. Bariyerin gerçekten ne zaman çıktığını ve ne zaman çıkmadığını
sözle değil komutla gösteriyor.

"Bu konu Türkçe'de neden zor bulunuyor?" (Bölüm 8)

Konu üç ayrı disiplinin kesişimine düşüyor:

  1. C standardı paragrafları (C17 §5.1.2.4, §6.7.3, §7.14.1.1, §7.17)
  2. Derleyici davranışı (gcc/clang'in farklı bayraklar altında emit ettiği komutlar)
  3. Donanım bellek modeli (ARM weakly-ordered, DMB/DSB/ISB)

Türkçe içerik tipik olarak yalnızca birinci cepheden — "değişebilir değişken"
açıklamasıyla — yaklaşıyor. `_Atomic` ve memory order ailesinin pratik
karşılığı, ARM'da `stlr` ile `dmb ish` ayrımı, Linux çekirdeğinin "volatile
considered harmful" tutumu Türkçe ekosistemde neredeyse hiç tartışılmamış.

Kaynaklar (yazıda kullanılan)

  • ISO/IEC 9899:2018 (C17) §5.1.2.4, §6.7.3, §7.13.2.1, §7.14.1.1, §7.17
  • Linux kernel — `Documentation/process/volatile-considered-harmful.rst` (Jonathan Corbet)
  • LWN — Jonathan Corbet, C11 atomic variables and the kernel
  • ARM ARM (DDI 0487) — Memory Ordering bölümü
  • ARM Cortex-A Programmer's Guide (DEN 0013) — Memory Barriers
  • cppreference — `sig_atomic_t`, `memory_order`, `_Atomic`
  • Hans Boehm, Threads cannot be implemented as a library (PLDI 2005)
  • Marc Brooker, C++11's atomic and volatile, under the hood on x86

Öz-eleştiri (Faz 6) özeti

  • İlk taslakta MISRA C:2025 için spesifik kural numaraları (8.13, 8.14) yazılmıştı —
    doğrulanamadığı için genelleştirildi.
  • "her seq_cst yazma ARM'da iki yanlı bariyer üretir" — ARMv8'de yanlış
    (`stlr` tek komut); ARMv7/ARMv8 ayrımı yapılarak düzeltildi.
  • ARMv7-A assembly örneği seq_cst varsayılanını kullanır şekilde netleştirildi.
  • Her olgusal iddia (standart paragrafları, kernel doc, ARM komutları) bağımsız
    kaynaklarla doğrulandı.

Yayın akışı

  • Dosya: `_posts/2026-06-13-volatile-yetmez-c-atomic.md`
  • Dal: `post/2026-06-13-volatile-yetmez-c-atomic` (master'a doğrudan push yok)
  • Front matter mevcut yazılarla (coupling, bandpass) birebir uyumlu
  • Yayın kapısı: son yayın 2026-06-04, arada 9 gün → `min_yayin_araligi_gun = 2` rahat sağlandı
  • Hiçbir gizli / proje-spesifik / ihracat kontrollü içerik yok; tamamı kamuya açık
    standart ve dokümantasyondan üretildi

İnceleyene

İnceleme kararı insana ait. Yazıdaki herhangi bir teknik iddia (örneğin assembly
örneklerinin gerçek gcc 13 çıktısıyla %100 örtüşmesi) godbolt.org'ta hızlıca
doğrulanabilir.

🤖 Generated with Claude Code

C11 _Atomic ile volatile arasındaki ayrımı standart paragrafları, Linux
çekirdeği yorumu ve ARM Cortex-A53/Cortex-A9 üzerinde gcc'nin emit ettiği
assembly çıktısı üzerinden somut biçimde ele alan yazı.

- Konu seçimi: alan rotasyonu (son 5 yazı düşük seviye C/eşzamanlılık alanına
  girmiyordu)
- Derinlik öğesi (Bölüm 7): bellek/assembly incelemesi — ARMv8 stlr ve ARMv7
  dmb ish komutlarının somut karşılaştırması
- topics.md ledger güncellendi (yayında listesine son 4 yazı eklendi)
- agent/research/ altına araştırma notları eklendi

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant