SORU
16 HAZİRAN 2011, PERŞEMBE


Print senkronize/güvenli iş parçacığı?

Genel olarak akarsu senkronize değil sanırım, kullanıcı için uygun kilitleme. Ancak, cout gibi şeyler standart kütüphanede özel muamele?

Birden çok iş parçacığı cout yazıyorsanız, cout nesne bozabilir? Senkronize bile hala rastgele aralanmış çıktı almak istiyorum, ama o araya girme garantili olduğunu anlıyorum. Bu, güvenli birden çok iş parçacığı cout kullanımı kolay mı?

Bu satıcı bağlıdır? Gcc ne yapar?


ÖnemliLütfen Cevabınız için başvuru falan dersen "Evet" çünkü birkaç kanıta ihtiyacım var.

Benim sorunum da temel sistem çağrıları hakkında değil, bu iyi, ama dere üstüne tampon katmanı ekleyin.

CEVAP
16 HAZİRAN 2011, PERŞEMBE


C 03 standart hakkında hiçbir şey söylemiyor. Bir iş parçacığı güvenliği hakkında hiçbir garanti, iş parçacığı için güvenli değil gibi davranın.

Özellikle burada ilginç olan cout tamponlu olması. Eğer write çağrıları (ya da her neyse o, belirli bir uygulama bu yönde gerçekleştirir) birbirini dışlayan garantisi varsa bile, tampon farklı iş parçacıkları tarafından paylaşılan olabilir. Bu hızlı akışın iç durumunun bozulmasına yol açacaktır.

Ve eğer arabellek erişim güvenli iş parçacığı olması garanti ise bile, bu kod ne olacağını sanıyorsun?

// in one thread
cout << "The operation took " << result << " seconds.";

// in another thread
cout << "Hello world! Hello " << name << "!";

Muhtemelen her satırı burada karşılıklı dışlama hareket etmek istiyorum. Ama nasıl bir uygulama garanti edebilir?

C 11, bazı garantiler var. Bu doğrudan yabancı yatırımların §27.4.1 aşağıdaki [iostream söylüyor.nesneler.genel bakış]:

(§27.5.3.4) senkronize standart iostream nesnenin biçimlendirilmiş ve biçimlendirilmemiş giriş (§27.7.2.1) ve çıkış (§27.7.3.1) işlevleri ya da birden çok iş parçacığı tarafından standart bir C akım için eş zamanlı erişim sonucu olmayacaktır veri bir yarış (§1.10). [ Not: Kullanıcılar bu nesneleri ve akarsu eş zamanlı kullanım ile senkronize etmek gerekir eğer aralanmış karakterleri engellemek isterlerse birden çok iş parçacığı. — son not ]

Yani, bozuk akışları alamazsın, ama yine de çıktı çöp olabilir, ama bunları el ile eşitlemek gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrea Lewis

    Andrea Lewis

    14 Mart 2013
  • MotoManTV

    MotoManTV

    10 Aralık 2009
  • Paul Schroder

    Paul Schrode

    30 Kasım 2007