2016-05-01 11 views
8

Sabit gerçek zamanlı geri aramalarda kilit ve muteks kullanımı yasa dışıdır. Kilit serbest değişkenleri farklı konulara okunabilir ve yazılabilir. C dilinde, dil tanımı bozulabilir ya da olmayabilir, ancak çoğu derleyici, bir değişkenin uçucu olduğu ilan edildiğinde kullanılabilir montaj kodunu çıkarır (okuyucu iş parçacığı değişkeni donanım yazmacısı olarak ele alır ve bu nedenle değişkeni kullanmadan önce yük yönergelerini yayınlar. Çoğu önbellek uyumlu çok işlemcili sistemlerde yeterince iyi çalışır.)Swift'de kilitlenmeyen paylaşılan değişken? (işleyen volatil)

Bu tür bir değişken erişim Swift'de belirtilebilir mi? Veya sıralı derleme dili veya veri önbelleği temizleme/geçersiz kılma ipuçlarının Swift diline eklenmesi gerekir mi?

Eklendi: OSMemoryBarrier() (OSAtomic.h) 'den önce ve sonra çağrıları kullanacak ve potansiyel olarak birbiriyle ilişkili değişkenlerin ("kilitsiz" fifo/arabellek durumu sayaçları gibi) her birini kullanacak veya güncelleyecek vb.), yeterince sipariş edilen bellek yükünü ve mağaza talimatlarını (ARM işlemcilerde bile) zorlar mı?

+0

Neden herhangi bir yüksek düzeyli dil, belirli bir donanım mimarisi için çalışacak, ancak zayıf sıralı bir bellek modeli (ARM) içeren bir çok kişi için derlenebilecek bir özellik için bir yapı oluşturmalıdır? Dahası, C 'uçucu', aradığınız şey için asla _reliable_ çalışmaz. – CouchDeveloper

+0

Tek bir iddia, Swift'in bir endüstriyel güç sistemi programlama dili olarak faydalı olmayı hedeflemesidir. Endüstriyel sistemler genellikle gerçek zamanlı operasyonel kısıtlamalara sahip müşteriye özgü fiziksel gerçek dünya girdileri ve kontrolleri ile bağlantılıdır. – hotpaw2

+0

Bunlar gibi senaryolarda, yine de bir C API'sinden arayüz oluşturabilirsiniz. Fakat 'uçucu', eşzamanlı problemleri çözmek için uygun olmayacaktır. C11 standardında [Atomics operasyon kütüphanesi] (http://en.cppreference.com/w/c/atomic) içine bir göz attınız mı? Kilit içermeyen ilkeller var. – CouchDeveloper

cevap

2

Daha önce de belirttiğiniz gibi, volatile sadece değişkenin kayıtlara alınmayacağını garanti eder (kendini bir kayıt olarak ele alacaktır). Bu sadece okuma ve yazma için kilitlemez. En azından tutarlı, platformlar arası bir şekilde değil, atomikliğini de garanti etmez.

Neden? Talimat verme ve tanımlama (örneğin, Float64'ü 32bit veya daha az, kayan noktalı yazmaçlara sahip bir platformda kullanarak) ilk akla gelir.

Bu söyleniyor, OSAtomic kullanmayı düşündünüz mü?

+0

Belirli sistem grupları için üst düzey bir sistem programlama dilinde hala mümkün olması gereken çapraz platform olmayan pek çok şey var. Platform spesifik, "montaj dilinde kod yazmanız gerekir" anlamına gelmemelidir. ARM kılavuzu, belirli atomik yazma hizalama ve boyut gereksinimlerini belirtir. – hotpaw2

+0

Doğru, belirli bir işlemci için geliştirirken daha yüksek seviyelerde sorumluluk almak isteyebilirsiniz ve programlama dili sizi desteklemelidir. Ama korkarım Swift'in en azından bildiğim kadarıyla “uçucu” için bir alternatifi yok. –

İlgili konular