2013-05-01 9 views
6

In seguito alla risposta da this StackOverflow question come si crea il valore intero corretto per la maschera?Affinità thread impostato Android

Ho effettuato alcune ricerche su google e tutto ciò che ho trovato utilizza la macro CPU_SET da sched.h ma funziona su strutture cpu_set_t non definite quando si utilizza NDK. Quando provi ad usare il linker CPU_SET mi dà un errore di riferimento non definito (anche se mi collego con pthread).

risposta

10

Bene, alla fine ho trovato una versione che è stata presa direttamente da sched.h. Sto postando questo qui se qualcuno ha lo stesso problema e non vuole passare il tempo a cercarlo. Questo è abbastanza utile.

#define CPU_SETSIZE 1024 
#define __NCPUBITS (8 * sizeof (unsigned long)) 
typedef struct 
{ 
    unsigned long __bits[CPU_SETSIZE/__NCPUBITS]; 
} cpu_set_t; 

#define CPU_SET(cpu, cpusetp) \ 
    ((cpusetp)->__bits[(cpu)/__NCPUBITS] |= (1UL << ((cpu) % __NCPUBITS))) 
#define CPU_ZERO(cpusetp) \ 
    memset((cpusetp), 0, sizeof(cpu_set_t)) 

questo funziona bene quando il tipo di parametro in originale setCurrentThreadAffinityMask (dal post citato in questione) è semplicemente sostituito con cpu_set_t.

+0

Apparentemente Bionic ha il supporto per 'cpu_set_t' in [sched.h] (https://android.googlesource.com /platform/bionic.git/+/master/libc/include/sched.h), ma le intestazioni NDK hanno questa sezione rippata. Mi chiedo come pensa la gente di Google, se manipolano Bionic mentre lo confezionano con l'NDK (entrambi sviluppati e gestiti da Google). – Samveen

+1

@Samveen probabilmente non vogliono esporre tutte le API alle applicazioni NDK, per motivi – chrisvarnz

2

Vorrei ricordare che la funzione dal collegamento nel primo post non imposta l'affinità della CPU del thread. Si adatta per impostare l'affinità della CPU di processo. Certo, se hai un thread nella tua applicazione funziona bene, ma è sbagliato per diversi thread. Check up sched_setaffinity() descrizione ad esempio on http://linux.die.net/man/2/sched_setaffinity

+0

Benvenuti in [so]. Questo è inteso come una risposta, e se sì, a chi? –

+0

Purtroppo, non posso aggiungere commenti sui commenti. Quindi ho lasciato il mio commento qui. – Coreman

2

Prova aggiungere questo prima includono <sched.h>

#define _GNU_SOURCE 
Problemi correlati