in un multi-threaded (Linux/amd64 Pthread, C11) applicazione Ho un struct
(momitem_st
in monimelt.h) contenente in particolare due campiaccesso atomicly due campi scalari
uint16_t i_paylkind;
void* i_payload;
(se necessario, ho potuto cambiare il tipo di i_paylkind
a qualche altro tipo integrale, ad esempio uintptr_t
o atomic_uint
)
FWIW, i_paylkind
è un discriminante definente l'attuale struct
runtime tipo il i_payload
sta indicando.
È possibile accedere a questi due campi in modo atomico (ad esempio, altri thread che accedono allo stesso struct
). Naturalmente ho anche un pthread_mutex_t i_mtx;
nella stessa struttura che potrei bloccare (usando pthread_mutex_lock
). Ma per motivi di prestazioni, vorrei evitarlo (forse transactional memory potrebbe essere rilevante)
Sembra che <stdtomic.h>
non fornisca alcun macchinario per quello.
(domanda relativa ai miei MELT monitor GPLv3 + software)
Credo che sia necessario il supporto hardware per operazioni di confronto e scambio, o introdurre un blocco di livello superiore (spinlock, mutex, fino a voi). –
@ ParkYoung-Bae, no per niente. I tipi atomici sono definiti per tutti i tipi ma per gli array. –
Per inciso: pthread_mutex_t è solitamente un typedef per un tipo integrale. Questo non dovrebbe imporre sanzioni di performance enormi per impostazione predefinita. –