(Linux/amd64, PThreads, C11) uygulaması Ben özellikle iki alan erişen atomik olarak iki sayısal alanlar çok kanallı olarak
uint16_t i_paylkind;
void* i_payload;
içeren
struct
(
monimelt.h içinde
momitem_st
) var (ben değiştirebilir diğer bazı ayrılmaz türüne
i_paylkind
tipi, örn
uintptr_t
veya
atomic_uint
)
FWIW, i_paylkind
i_payload
işaret ediyor gerçek struct
çalışma zamanı tipi tanımlayan bir ayırt edici olduğunu.
Bu iki alana atomik olarak erişilebiliyor mu (aynı struct
numarasına erişen diğer konular). Elbette kilitleyebildiğim (pthread_mutex_lock
kullanarak) aynı yapıda bir pthread_mutex_t i_mtx;
var. Ancak performans nedenlerinden dolayı bunu önlemek isteyebilirim (belki de transactional memory ilgili olabilir)
<stdtomic.h>
, bunun için herhangi bir makine sağlamaz gibi görünüyor. Eğer gerçekten bir C11 derleyicisi varsa
İki karşılaştırma ve değiştirme işlemi için donanım desteğine ihtiyacınız olduğunu ya da daha yüksek düzeyli bir kilit (size bağlı spinlock, mutex) getirmeniz gerektiğine inanıyorum. –
@ ParkYoung-Bae, hayır hiç de değil. Atomik tipler tüm tipler için, ancak diziler için tanımlanmıştır. –
Bir kenara göre: pthread_mutex_t genellikle bir tümleşik tip için bir yazım hatasıdır. Bu, varsayılan olarak büyük performans cezaları vermemelidir. –