2008-09-29 28 views

cevap

-1

this Gözden Geçirme Daha fazlası için, this umut verici görünüyor. Yay yığını taşması.

+0

Lütfen sadece bağlantıyı yazmayın. Anahtar bilgiler cevapta olmalıdır. Her şekilde bir bağlantı ile ek. –

8

Intel'in open-source ThreadBuildingBlocks, .NET'in Interlocked sınıfı ile aynı işlevselliği sunan bir şablona sahiptir, Atomic.

gcc'nin Atomic yerleşiklerinden farklı olarak, çapraz platformdur ve belirli bir derleyiciye bağlı değildir. Nemanja Trifuno'nun doğru bir şekilde işaret ettiği gibi, x86 ve Itanium yongaları tarafından sağlanan compare-and-swap CPU talimatına bağlı. Intel kitaplığından başka bir şey beklemezsiniz:)

6

Linux, Win32 gibi atomik "kilitli" işlevleri sunamaz; çünkü bu işlevler donanım desteği gerektirir ve Linux bazı platformlarda çalışır. Bu desteği sunmayın. Kendinizi Intel x86/x64 ile sınırlandırabiliyorsanız, Boost paylaşılan işaretçi kitaplığında referans sayımının uygulanmasına göz atın.

8

Linux ile ilgisi olmayan sorunu netleştirmek için sadece birkaç not.

RWM (okuması değiştirme-yazma) işlemleri ve tek bir adımda yürütmek anlardır atomik çalıştırmak için donanım desteği; aralarında artışlar ve azalmalar, fetch_and_add, vb.

Bazı mimariler için (I386, AMD_64 ve IA64 dahil) gcc, atomik bellek erişimi için yerleşik bir desteğe sahiptir, bu nedenle harici bir libray gerekmez. Here API hakkında bazı bilgileri okuyabilirsiniz.

3

Apache Portable Runtime'ın atomic işlevleri, gerçekten Win32 InterlockedXXX işlevlerine çok yakındır.

1

Doğrudan x68 ile kilitlenmiş talimatları kullanmak için kaynağınıza bazı montaj kodu ekleyebilirsiniz.

lock xadd işlemini kullanmalısınız.

Örneğin bkz. this.

2

GTK ve QT programlarında kullanılan ve bağımsız olarak kullanılan oldukça yaygın bir glib kitaplığı, bağımsız atom işlemlerini sunar. Bir liste için bkz. http://library.gnome.org/devel/glib/2.16/glib-Atomic-Operations.html. Interlocked'in Win32 üzerinde desteklediği işlemlerin çoğu için g_atomic işlevleri vardır ve donanımın bunları doğrudan desteklediği platformlarda, gerekli derleme kodu olarak belirtilir.