首页 > 其他分享 >android pthread_t

android pthread_t

时间:2022-10-22 22:57:15浏览次数:36  
标签:__ gettid typedef thread internal pthread android

最近在解决tvm绑核问题时,发现android下绑核只有sched_setaffinity函数,这导致无法使用标准库中的td::thread::native_handle_type thread 进行绑核操作。虽然在ndk 21以上的版本提供了pthread_gettid_np函数获取线程相应的pid,但在较低版本中,还是没办法直接使用。

看下ndk 中 std 标准库上thread 的实现。

class _LIBCPP_TYPE_VIS thread

{

    __libcpp_thread_t __t_;
   ...

public:

    typedef __thread_id id;

    typedef __libcpp_thread_t native_handle_type;

  ...
};

typedef pthread_t __libcpp_thread_t;
typedef long pthread_t;

上面可以看出,在ndk的实现中native_handle_type 等价于pthread_t, 再根据pthread_gettid_np的实现,可以发现 ,pthread_t 其实就是pthread_internal_t的地址。在pthread_internal_t中保存了线程的tid


pid_t pthread_gettid_np(pthread_t t) {
return __pthread_internal_gettid(t, "pthread_gettid_np");
}

pid_t __pthread_internal_gettid(pthread_t thread_id, const char* caller) {
pthread_internal_t* thread = __pthread_internal_find(thread_id, caller);
return thread ? thread->tid : -1;

}

typedef struct pthread_internal_t

{

struct pthread_internal_t* next;

struct pthread_internal_t* prev;

pthread_attr_t attr;

pid_t tid;

bool allocated_on_heap;

pthread_cond_t join_cond;

int join_count;

void* return_value;

int internal_flags;

__pthread_cleanup_t* cleanup_stack;

void** tls; /* thread-local storage area */

/*

* The dynamic linker implements dlerror(3), which makes it hard for us to implement this

* per-thread buffer by simply using malloc(3) and free(3).

*/

#define __BIONIC_DLERROR_BUFFER_SIZE 512

char dlerror_buffer[__BIONIC_DLERROR_BUFFER_SIZE];

} pthread_internal_t;

标签:__,gettid,typedef,thread,internal,pthread,android
From: https://www.cnblogs.com/wanger-sjtu/p/16817532.html

相关文章

  • Android USB之复合设备(gadget)详解
    一.USBgadgetdriverUSBgadget驱动描述了USB设备控制器的硬件操作方法,不同的USB控制器实现不同。有的USB控制器只能作为设备控制器,如ompa、pxa2等USB设备控制器,其......
  • 利用Python操作Android手机刷抖音
    前言:    很多时候,想要学习一个陌生领域的知识时,需要先定一个或基础或高阶的目的,这个目标最好带有趣味性,然后锚定这个目标;或许最终目标很轻松就被实现了,也或许最终发......
  • Android Fragment实现一个底部导航栏切换页面
    用户界面UserActivity中包含两个Fragment,分别用来显示不同的应用功能,就像QQ中“聊天栏”“联系人”“动态”这三个底部导航栏之间的切换一样。效果图:  在UserActivi......
  • android开发:弹框(AlertDialog)和提示信息Toast字体大小颜色设置
    一、AlertDialog: AlertDialog.Builderbuilder=newAlertDialog.Builder(getActivity());builder.setTitle("温馨提示");builder.setMessage("是否进行下一个病人......
  • android实现登录注册界面
    创建一个androidstudio工程在drawable中添加main_left:<?xmlversion="1.0"encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/andr......
  • Android 增加一个应用启动界面
    为了让app的逼格更高 为了让app的界面更人性化,并且让app在刚刚启动数据还没加载出来时不至于一片白屏太难看以至于吓跑用户,尝试增加一个启动页面。 首先建立一个新的......
  • Android 软键盘删除键触发问题分享
    本文解决的问题:Android输入法软键盘删除键点击多次,只触发一次删除事件本文示例代码地址:Android软键盘删除键触发示例代码背景笔者维护的app功能中,有个图文编辑器,由......
  • #Android studio 微信页面制作(二)
    今天继续用Androidstudio实现微信页面的制作首先打开项目看看之前的进展。这里我在第一次制作的基础上,使用recycleview等控件对联系录页面进行了新的UI设计布局。本次......
  • android有声电子书新版本1.61发布
    有声电子书(适用于Android1.5及以上版本)软件支持格式为txt,umd,jpg文字及漫画书的阅读,提供用户搜索SD卡中所有图书。特别加入了文本直接转换成语音的有声阅读功能。......
  • Android软件中嵌入地图之一:Sogou地图
          在App中加入地图功能真是让人揪结,Google地图功能强大,但是有些国内的手机厂商去掉了手机系统中Google地图的相关库,所以这类机型将无法安装调用了Google地图的软......