【记录一个问题】android ndk下设置线程的亲缘性,总有两个核无法设置成功

参考了这篇文章:https://blog.csdn.net/lanyzh0909/article/details/50404664
大体的代码如下:

#include <pthread.h>
#include <sched.h>

#include <stdio.h>
#include <stdlib.h>
#include <sys/sysinfo.h>
#include <sys/types.h>
#include <unistd.h>

void* _thread_func(void* param){
    int thread_index = *(int*)param;
    int cpu_count = sysconf(_SC_NPROCESSORS_CONF);
    cpu_set_t mask;                // CPU核的集合
    cpu_set_t get;                 //获取在集合中的CPU
    CPU_ZERO(&mask);               //置空
    CPU_SET(thread_index, &mask);  //设置亲和力值
    //设置线程CPU亲和力
    if (sched_setaffinity(0, sizeof(mask), &mask) == -1) {
      printf("warning: could not set CPU %d affinity, continuing...\n", thread_index);
    } else {
      printf("thread %d set to cpu %d\n", thread_index, thread_index);
    }
}

在高通骁龙835处理器上,始终打印如下内容:
warning: could not set CPU 7 affinity, continuing...
thread 1 set to cpu 1
thread 0 set to cpu 0
thread 3 set to cpu 3
thread 2 set to cpu 2
warning: could not set CPU 4 affinity, continuing...
thread 5 set to cpu 5
thread 6 set to cpu 6

猜测是系统故意让其中的两个核无法被设置亲缘性,原因未知。

原文地址:https://www.cnblogs.com/ahfuzhang/p/11623742.html

时间: 2024-11-05 21:58:35

【记录一个问题】android ndk下设置线程的亲缘性,总有两个核无法设置成功的相关文章

设置线程的亲缘性(指定其所运行的CPU核心)

#include <stdio.h> #include <windows.h> #include <process.h> #include <time.h> unsigned int _stdcall thread_proc(void* arg) { double x = 100.0; int r = 0; srand((unsigned)time(0) ); while(1) { r = rand();//模拟运算 x/=r; } return 0; }

Android ndk下用AssetManager读取assets的资源

转自:http://www.cppblog.com/johndragon/archive/2012/12/28/196754.html 在使用 cocos2dx 在 Android 上进行游戏开发时,遇到了奇怪的事情,无论什么代码,都无法读资源文件.不得以只好寻求更高版本的Api. 在Android ndk api level 9 之后,提供了一套称为 AssetManager 的api. 这个api 的工作原理是 - Java通过JNI把getAssets得到的AssetManager传递给一

android ndk下文件遍历与删除

在做手机开发过程中,难免要进行一些本地文件管理操作,比如很多常见app如微博.微信等都有清除缓存功能,该功能就是遍历app自己的缓存目录,然后删除全部缓存文件.使用java的File类可以实现本地文件遍历及删除等等功能,如果使用ndk的方式该如何实现呢?以前写过<基于c++使用win32 api遍历文件夹>,由于android ndk平台属于linux系统,所以该方式是无法使用的.通过查找linux下文件管理相关资料,顺利实现了文件遍历与删除功能,下面为相应代码,需要包含<dirent.

Android NDK 下的宽字符编码转换及icu库的使用(转)

原贴http://topic.csdn.net/u/20101022/16/1b2e0cec-b9d2-42ea-8d9c-4f1bb8320a54.html?r=70149216 ,看过并动手实现,记录下来以备再用. 如果是在java层,有String类可以很好的转换各种编码,在ndk下面就没有现成的公开的工具,不过可以用icu4c. ICU4C 是IBM的国际化开发组件ICU的C语言实现版本.在android系统里也有实现.ndk里面并没有公开可用的api,需要自己加载动态库来调用转换函数.

【记录一个问题】macos下使用opencl, clSetEventCallback不生效

一开始的调用顺序是这样: enqueueWriteBuffer enqueueNDRangeKernel enqueueReadBuffer SetEventCallback 执行后主程序用getchar()等待,但回调函数没有被触发. 修改函数调用顺序: SetEventCallback enqueueWriteBuffer enqueueNDRangeKernel enqueueReadBuffer 函数报错 CL_INVALID_EVENT -58 修改成以下顺序没有报错,但是回调函数仍然

Android NDK编程浅入深出之--Android.mk

    Android.mk Android.mk是一个向Android NDK构建系统描述NDK项目的GUN Makefile片段.它是每一个NDK项目的必备组件.构建系统希望它出现在jni子目录中.下面是hello-jni项目中Android.mk文件的内容. # Copyright (C) 2009 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License

使用GDB调试Android NDK native(C/C++)程序-转

最 近写了些需要跨平台兼容的C++库,Android是其中需要兼容的平台之一.区别于Windows,Mac中功能强大的IDE环境,官方并没有为 Android ndk提供太多的支持.因此,尝试了下通过一些配置使用gdb来调试Android ndk的C++程序,感觉还算方便,记录下来跟大家分享. 先 说明下,这里所谓的ndk native程序跟Android上层java应用没有什么关系,也不需要涉及jni来封装native接口,通俗来讲,就是把编译好的纯C/C++程 序,push到Android设

【转载】cocos2dx 中 Android NDK 加载动态库的问题

原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各个平台的SDK,遇到了不少问题,也从中了解了不少知识,之前一直觉得没啥好写的,毕竟做了4个月的游戏开发,也没有碰上什么真正的大问题,cocos2dx的引擎包得也很好,能让人把大部分时间都关注在游戏逻辑.效果的处理上,当然,之前的libevent还是小坑一下,但是和后来遇到的相比,也算不上什么了. 我最

Android NDK(JNI)开发

<基于Windows平台,Android NDK(JNI)开发技术> [摘要]本文介绍如何基于Windows平台,在Eclipse中使用Android NDK技术实现"Android平台上的JNI ( Java Native Interface ) "开发.Android NDK开发需要一定的Java JNI技术基础.Android NDK实质,可以简单的认为是Android平台提供的一组套件,将一些C/C++代码通过JNI的形式为Android平台所复用,该技术可以使