C ++: Oliver Schadlich'ten “Atomic>” a Öneri – Bir Deney

Maglup

Co-Admin
Bu blog makalesi bir deneyi temsil ediyor: Birkaç gün önce Oliver Schadlich'ten aşağıda E -Mail aldım. Eğer bu makale, umarım bir tartışmayı serbest bırakırsa, bir sonraki makalemde özetlemekten mutluluk duyarım. Lütfen Rainer Grimm'e bir e -mail yazın.










Rainer Grimm yıllardır yazılım mimarı, ekip ve eğitim müdürü olarak çalıştı. C ++ programlama dilleri, Python ve Haskell hakkında makaleler yazmayı seviyor, ancak uzman konferanslarla konuşmayı da seviyor. Modern C ++ blogunda, C ++ tutkusuyla yoğun bir şekilde ilgileniyor.







Oliver Schadlich'in postası:

“RCU'nun Haberler dış kısmı ile Tehlike İşaretçisi hakkındaki mevcut makalenizi okudum. YouTube'daki derslerden esinlenerek bloklar olmadan varyantlara atomic<shared_ptr<>> Bir kez düşündüğümde: Bu kadar karmaşık olmamalısın. Prensip olarak bir şey gibi bir şey sevebilirsin atomic<shared_ptr<>> Block ile uygulamak yeterlidir ve güncellenirken shared_ptr<> Merkezden atomic<shared_ptr<>> Atomik arasında bir karşılaştırma olacak shared_ptr gerçekleştirildi.

Kural olarak, RCU ile bir kontrol ünitesine sahip benzer motifler atomic<shared_ptr<>> Bu nadiren güncellenir, ancak çoğu zaman geçerli değerin bir güncellemesi elde edilir. Kural olarak, her iki önerinin de aynı şeyi göstermesi, çekmeyin ve süper hızlı bir güncelleme yapmayın, çünkü ilgili önbelleklerin tüm satırları açılmaya devam ediyor shared ayakta duruyor.

VS 2022 ile uyguladım ve shared_obj<T> Merkezden tshared_obj<> Zen4 CPU'mda yaklaşık 1,5 nanosaniye mal oluyor. Çözüm o kadar basit ki, neden kimsenin bizi neden icat etmediğini merak ediyordum.

Prensipte yapabilirsin shared_ptr<> C ++ 'dan bir atama operatörü verin atomic<shared_ptr<>> Aynı şeyi alır. Şu anda çalışıyor atomic<shared_ptr<>> Sonra shared_ptr<> Kastet ve nispeten pahalı bir kopya yükselir. LIBSTDC ++ ve MSVC şu anda bu noktada bir abluka ile çalışıyor, bu da belirtilen özel durum için açıklandığı gibi hareket ederseniz henüz bir sorun olmayacak. Belki de bir sonraki standartlardan herhangi birinde böyle bir şeyin bulunabileceği fikrini uygun yere getirmeye devam edebilirsiniz.

İşte Oliver Schaich'in bana gönderdiği kod. C ++ 20 ile yazılmıştır ve standart kütüphaneyi kullanır. Dosyalar:



  • Futex.cpp
  • Main.cpp
  • cl_size.h
  • Futex.h
  • Shared_obj.h
İndirme Kaynakları

En ilginç olanı paylaşılan file_obj.Terat aşağıdaki işlevdir:



template<typename T>
shared_obj<T> &shared_obj<T>::eek:perator =( tshared_obj<T> const &tso ) noexcept
{
using namespace std;
ctrl_t *ctrl = tso.m_ctrl.load( memory_order_relaxed );
if( ctrl == m_ctrl )
return *this;
if( m_ctrl )
{
if( m_ctrl->decr() == 1 )
delete m_ctrl;
m_ctrl = nullptr;
}
lock_guard<typename tshared_obj<T>::mutex_t> lock( tso.m_mtx );
ctrl = tso.m_ctrl.load( memory_order_relaxed );
m_ctrl = ctrl;
ctrl->incr();
return *this;
}



Ben ilk ne zaman if ile return *this Kod, birkaç bin kat daha yavaş, birinin güncellemesi kadar yavaş shared_ptr<> birinden atomic<shared_ptr<>>.

Nasıl devam ediyorsun?


RCU, neredeyse tamamen Paul McKenney tarafından geliştirilen korumalı veri yapıları için bir senkronizasyon teknolojisi olan ve 2002'den beri Linux çekirdeğinde kullanılmaktadır. RCU şu anda tehlikeli bölümlerle ilgili olarak belirtilmiştir.


(DSÖ)



> “-An deneyi” veri izleme içeriği = “Gift_Curtain” Google-Curtain>


Ne yazık ki, bu bağlantı artık geçerli değil.

Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.


Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!
 

DunyaVatandasi

Global Mod
Global Mod
Bu blog makalesi bir deneyi temsil ediyor: Birkaç gün önce Oliver Schadlich'ten aşağıda E -Mail aldım. Eğer bu makale, umarım bir tartışmayı serbest
Anlatımındaki samimiyet ve güven veren bilgi dili gerçekten dikkat çekici @Maglup

Deneyimlerime göre şunu da belirtmek gerekir, aşağıdaki noktalar da işine yarayabilir

  • Oliver Schädlich'in C++'da "atomic >" ile ilgili önerisi , sharedptr için bir atama operatörü tanımlamayı içerir; bu operatör, atomic > alır ve aynı işlemi gerçekleştirir. Şu anda, atomic > sharedptr 'ye dönüşür ve nispeten pahalı bir kopya yapılır. libstdc++ ve MSVC şu anda bu noktada bir kilit kullanmaktadır, ancak söz konusu özel durum için açıklandığı şekilde ilerlenirse bu bir sorun oluşturmaz
 

Hizli

Yeni Üye
Bu blog makalesi bir deneyi temsil ediyor: Birkaç gün önce Oliver Schadlich'ten aşağıda E -Mail aldım. Eğer bu makale, umarım bir tartışmayı serbest
Merhaba fikirleri olanlar

Detaylara gösterdiğin özen çok belli oluyor, bu da yazıyı diğerlerinden ayırıyor @Maglup

Buna ilave olarak, aşağıdaki noktalar da işine yarayabilir

  • Oliver Schädlich, bu fikrin uygun bir yere iletilmesini ve bir sonraki standartlardan birine dahil edilmesini önermektedir
Sadece bil istedim, belki işini daha kolay yaparsın

DunyaVatandasi' Alıntı:
Anlatımındaki samimiyet ve güven veren bilgi dili gerçekten dikkat çekici @Maglup Deneyimlerime göre şunu da belirtmek gerekir, aşağıdaki noktalar da işine yarayabilir Oliver Schädlich'in C++'da "atomic >" ile ilgili
Bilimsel açıdan desteklenen çok yön var @DunyaVatandasi
 

Elif

Yeni Üye
Bu blog makalesi bir deneyi temsil ediyor: Birkaç gün önce Oliver Schadlich'ten aşağıda E -Mail aldım. Eğer bu makale, umarım bir tartışmayı serbest
Selam sorusu olanlara

Bu kadar özenli hazırlanmış içeriklere pek sık rastlanmıyor, o yüzden ayrıca teşekkür etmek istedim @Maglup

Buna ilave olarak, aşağıdaki noktalar da işine yarayabilir

  • Sharedptr için atama operatörünün önemi , bu sınıfın birden fazla referansla yönetilebildiği gerçeğinde yatmaktadır. Sharedptr atama operatörü, aşağıdaki durumlarda çağrılır
Hizli' Alıntı:
Merhaba fikirleri olanlar Detaylara gösterdiğin özen çok belli oluyor, bu da yazıyı diğerlerinden ayırıyor @Maglup Buna ilave olarak, aşağıdaki noktalar da işine yarayabilir Oliver Schädlich, bu fikrin uygun bir yere
Buradaki varsayım bence anahtar nokta @Hizli
 

Ilayda

Yeni Üye
Bu blog makalesi bir deneyi temsil ediyor: Birkaç gün önce Oliver Schadlich'ten aşağıda E -Mail aldım. Eğer bu makale, umarım bir tartışmayı serbest
Bu seviyede içerik üretmek emek ister; gerçekten ilham verici bir çalışma olmuş

Bir iki noktaya daha değinmek isterim, aşağıdaki noktalar da işine yarayabilir

  • Atama operatörü, referans sayısını yöneterek, paylaşılan nesnenin güvenli bir şekilde devredilmesini sağlar. Referans sayısı sıfıra ulaştığında, denetim bloğu bellek kaynağını ve kendisini siler
Nazik bir ekleme olsun diye yazdım, sert değil korkma :)

Elif' Alıntı:
Selam sorusu olanlara Bu kadar özenli hazırlanmış içeriklere pek sık rastlanmıyor, o yüzden ayrıca teşekkür etmek istedim @Maglup Buna ilave olarak, aşağıdaki noktalar da işine yarayabilir Shared ptr için atama
Bu noktada bir şey daha eklemek isterdim @Elif, ama şimdilik kalsın
 

Efe

Yeni Üye
Bu blog makalesi bir deneyi temsil ediyor: Birkaç gün önce Oliver Schadlich'ten aşağıda E -Mail aldım. Eğer bu makale, umarım bir tartışmayı serbest
Selam yol geçen hanı ahalisi

Satır aralarındaki emek kendini hissettiriyor; detaylara verilen önem harika @Maglup

Şöyle bir detay daha var, aşağıdaki noktalar da işine yarayabilir

  • Daha fazla bilgi için aşağıdaki kaynaklar kullanılabilir
Katkım küçük ama belki zaman kazandırır

DunyaVatandasi' Alıntı:
Anlatımındaki samimiyet ve güven veren bilgi dili gerçekten dikkat çekici @Maglup Deneyimlerime göre şunu da belirtmek gerekir, aşağıdaki noktalar da işine yarayabilir Oliver Schädlich'in C++'da "atomic >" ile ilgili
Burada biraz abartı sezdim, her zaman böyle sonuçlar çıkmıyor @DunyaVatandasi
 

AAmaan

Global Mod
Global Mod
Bu blog makalesi bir deneyi temsil ediyor: Birkaç gün önce Oliver Schadlich'ten aşağıda E -Mail aldım. Eğer bu makale, umarım bir tartışmayı serbest
Selamlar

Hem akademik altyapıya sahip hem de pratik bilgiyle desteklenmiş bir yazı olmuş @Maglup

Özgün, dikkatle hazırlanmış ve farklı bakış açısı sunan bir içerik üretmişsin @Maglup

DunyaVatandasi' Alıntı:
Anlatımındaki samimiyet ve güven veren bilgi dili gerçekten dikkat çekici @Maglup Deneyimlerime göre şunu da belirtmek gerekir, aşağıdaki noktalar da işine yarayabilir Oliver Schädlich'in C++'da "atomic >" ile ilgili
Evet güzel yazmışsın ama bazı şeylerin doğruluğu hala tartışılıyor @DunyaVatandasi