Multi-threading: Difference between revisions
Line 36: | Line 36: | ||
The processorid parameter specifies which processor the thread can run on. Non-negative values correspond to a specific CPU. (e.g. 0 for the Appcore and 1 for the Syscore on Old3DS) Special value -1 means all CPUs, and -2 means the default CPU for the process (Read from the [[NCCH/Extended Header|Exheader]], usually 0 for applications, 1 for system services). Games usually create threads using -2. | The processorid parameter specifies which processor the thread can run on. Non-negative values correspond to a specific CPU. (e.g. 0 for the Appcore and 1 for the Syscore on Old3DS) Special value -1 means all CPUs, and -2 means the default CPU for the process (Read from the [[NCCH/Extended Header|Exheader]], usually 0 for applications, 1 for system services). Games usually create threads using -2. | ||
With the Old3DS kernel, the s32 processorid must be < | With the Old3DS kernel, the s32 processorid must be <2. | ||
With the New3DS kernel: processorid must be | With the New3DS kernel: processorid must be inferior to <total cores(MPCore "SCU Configuration Register" CPU number value + 1)>. When processorid==0x2 and the process is not an APPLICATION mem-region process, exheader kernel-flags bitmask 0x2000 must be set otherwise error 0xD9001BEA is returned. When processorid==0x3 and the process is not an APPLICATION mem-region process, error 0xD9001BEA is returned. These are the only restriction checks done by the kernel for processorid. | ||
The thread priority value must be in the following range, otherwise error 0xE0E01BFD is returned: 0x0..0x3F. | The thread priority value must be in the following range, otherwise error 0xE0E01BFD is returned: 0x0..0x3F. |