Nasıl 86, kol üzerinde çalışan Linux üzerinde atomik işlemleri gerçekleştirmek için GCC ve ıcc?
Her Modern işletim sistemi bugün bazı atomik işlemler sağlar:
- Windows
Interlocked*
API vardır - FreeBSD
<machine/atomic.h>
vardır - Solaris
<atomic.h>
vardır - Mac OS X
<libkern/OSAtomic.h>
var
Linux için böyle bir şey var mı?
- Çoğu Linux desteklenen platformlar da dahil olmak üzere üzerinde çalışmak gerek: 86, x86_64 vekol.
- En azından GCC ve Intel Derleyici üzerinde çalışmam gerekiyor.
- Çok konuşmak ya da qt gibi 3 par kütüphane kullanmak istemiyorum.
- C (C Gerekli değil) çalışmak istiyorum
Sorunlar:
- GCC atom yerleşiklere
__sync_*
tüm platformlar (ARM) desteklenmez ve Intel derleyici tarafından desteklenmiyor. - AFAIK
<asm/atomic.h>
kullanım alanı olarak kullanılmamalıdır ve başarılı bir şekilde hiç kullanmadım. Ayrıca, eğer Intel derleyici ile çalışmak istiyorsunuz emin değilim.
Herhangi bir öneriniz var mı?
Benim için geçerli değil bazıları __sync*
işaret ama bu konuyla ilgili pek çok soru olduğunu biliyorum (ARM) ve bazı asm/atomic.h
işaret.
Belki GCC derleme destekler ICC () bu satır içi derleme bir kütüphane var mı?
Düzenleme:
Ekleme işlemleri sadece (atom sayacı uygulama ama CAS gerektiren serbest yapıları kilit sağlar) için çok kısmi bir çözüm var:
Eğer libstc
(Intel Derleyici libstdc
kullanır) sonra kullanırsanız <ext/atomicity.h>
<bits/atomicity.h>
tanımlanan __gnu_cxx::__exchange_and_add
kullanabilirsiniz. Derleyici sürümüne bağlıdır.
Ancak hala CAS destekleyen bir şey görmek istiyorum.
CEVAP
Projeler bu kullanarak
http://packages.debian.org/source/sid/libatomic-ops
Eğer CAS gibi basit işlemleri istiyorsan, sen sadece arch-belirli bir çekirdek ve kemer kontrolü uygulamalarında kullanım alanı ile autotools/cmake kullanabilir mi? Bildiğim kadarıyla lisans gider, ancak kernel GPL, bence bu tartışılabilir bu satır içi montaj için bu işlemleri tarafından sağlanan Intel/AMD, çekirdek bir lisans onları. Onlar sadece çekirdek kaynağı olarak kolay erişilebilir bir biçimde olabilir.
nasıl komut satırından argüman olarak ...
Nasıl Linux bir süreç belirli bir bağl...
Nasıl bir hizmet Android üzerinde çalı...
Nasıl Linux üzerinde başka bir uygulam...
Nasıl tüm klasörleri ve dosyaları Linu...