2013-05-01 9 views
6

Im Anschluss an die Antwort von this StackOverflow question wie kann ich die richtige integer für Maske erstellen?Android Set Faden Affinität

Ich habe etwas googeln und alles, was ich gefunden habe verwendet CPU_SET Makro von sched.h, aber es funktioniert auf cpu_set_t Strukturen, die bei der Verwendung von NDK undefiniert sind. Bei Versuchen Sie es mit CPU_SET Linker gibt mir undefined reference Fehler (auch wenn ich gegen Pthread Link).

Antwort

10

Nun, am Ende fand ich eine Version, die direkt aus sched.h genommen wurde. Im dieses Posting hier, wenn jemand das gleiche Problem hat und will nicht die Zeit für sie die Suche verbringen. Das ist sehr nützlich.

#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)) 

Das funktioniert gut, wenn der Parametertyp in dem ursprünglichen setCurrentThreadAffinityMask (von der Post in der Frage erwähnt) einfach mit cpu_set_t ersetzt.

+0

Offenbar hat Bionic Unterstützung für 'cpu_set_t' in [sched.h] (https://android.googlesource.com /platform/bionic.git/+/master/libc/include/sched.h), aber der NDK Header hat, dass Abschnitt rippes aus. Ich frage mich, wie die Leute bei Google denken, wenn sie Bionic während der Verpackung mit dem NDK (beide von Google entwickelt und gewartet) zerlegen. – Samveen

+1

@Samveen sie wollen wahrscheinlich nicht alle APIs zu NDK-Anwendungen, aus Gründen offenbaren – chrisvarnz

2

Ich möchte Ihre Aufmerksamkeit darauf lenken, dass die Funktion von Link im ersten Post die Thread-CPU-Affinität nicht festlegen. Es ist angemessen, die Prozess-CPU-Affinität einzustellen. Natürlich, wenn Sie einen Thread in Ihrer Anwendung haben es funktioniert gut, aber es ist für mehrere Threads falsch. Prüfen Sie sched_setaffinity() Beschreibung zum Beispiel on http://linux.die.net/man/2/sched_setaffinity

+0

Willkommen zu [so]. Ist das eine Antwort, und wenn ja, an wen? –

+0

Leider kann ich keine Kommentare zu Kommentaren hinzufügen. Also habe ich meinen Kommentar hier gelassen. – Coreman

2

Versuchen Sie, diese hinzufügen, bevor Sie umfassen <sched.h>

#define _GNU_SOURCE