Bir iş parçacığının yumurtlanması kendi başına bellek siparişi garantileri veriyor mu?


20

Kabaca bunu yapmak istiyorum:

İlk iş parçacığı:

  • küresel değişkenlere bazı değerler yazın (bir daha asla yazılmayacaklar)
    • Bu orta derecede büyük veri olabilir (diziler, dizgiler, vb.). Basitçe yapılamaz std::atomic<>.
  • spawn diğer konuları

Diğer konular:

  • küresel durumu oku
  • iş yap vs.

Şimdi, argümanları aktarabileceğimi biliyorum std::thread, ama bu örnekle C ++ 'ın bellek garantilerini anlamaya çalışıyorum.

Ayrıca, herhangi bir gerçek dünya uygulamasında, bir iş parçacığının yaratılmasının, iş parçacığının o noktaya kadar yazdığı her şeyi "görebildiğinden" emin olan bir bellek engeline neden olacağından oldukça eminim.

Ama sorum şu: bu standart tarafından garanti ediliyor mu?

Bir yana: Sanırım biraz kukla ekleyebilirim std::atomic<int>ve diğer iş parçacıklarına başlamadan önce yazabilirim, sonra diğer iş parçacıklarında, başlangıçta bir kez okuyun. Bundan önce gerçekleşen tüm makinelerin daha önce yazılmış olan küresel durumun düzgün bir şekilde görülebileceğini garanti edeceğine inanıyorum.

Ama benim sorum, bunun gibi bir şey teknik olarak gerekli mi, yoksa iplik oluşturma yeterli mi?


Sanırım biraz kukla ekleyebilirim std::atomic<int>... Kullanabilirsin std::atomic_thread_fence.
Rin Kaenbyou

@NathanOliver d'oh. yorum kaldırıldı. Sorularım ne kadar aptal olursa olsun, bana ne sıklıkta yardım
ettiğini sayamıyorum

1
@ idclev463035818 Endişelenme. Hepimizin başına gelir.
NathanOliver

Yanıtlar:


26

İş parçacığı oluşturmak yeterlidir. İş parçacığı oluşturucu ile [thread.thread.constr] / 7 başına yeni iş parçacığının başlangıcı arasında bir senkronizasyon noktası vardır.

Senkronizasyon: Yapıcı çağrısının tamamlanması, kopyasının çağrılmasının başlangıcıyla senkronize olur f.

Bu, yeni iplik üretilmeden önce evrendeki tüm durumun ortaya çıkan evre tarafından görülebilir olduğu anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.