8

この StackOverflow の質問からの回答に従って、マスクに適切な整数を作成するにはどうすればよいですか?

私はいくつかのグーグルを作成し、見つかったものはすべてCPU_SETマクロを使用していますが、NDK を使用する場合は未定義の構造でsched.h動作します。cpu_set_tリンカーを使用しようとすると、CPU_SET未定義の参照エラーが発生します (pthread に対してリンクしているにもかかわらず)。

4

3 に答える 3

14

最終的に、 から直接取得したバージョンを見つけましたsched.h。誰かが同じ問題を抱えていて、検索に時間を費やしたくない場合は、ここに投稿します。これは非常に便利です。

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

setCurrentThreadAffinityMaskこれは、元の(質問で言及された投稿からの)パラメータータイプが単純に に置き換えられた場合にうまく機能しますcpu_set_t

于 2013-05-01T18:08:53.110 に答える
5

最初の投稿のリンクからの関数は、スレッドの CPU アフィニティを設定しないことに注意してください。プロセスの CPU アフィニティを設定するのに適しています。もちろん、アプリケーションにスレッドが 1 つあれば問題なく動作しますが、スレッドが複数ある場合は正しくありません。たとえば、http: //linux.die.net/man/2/sched_setaffinity で sched_setaffinity() の説明を確認してください。

于 2014-02-02T13:36:28.430 に答える
2

インクルードする前にこれを追加してみてください<sched.h>

#define _GNU_SOURCE
于 2014-04-03T08:20:38.977 に答える