IPC thread写法太晦涩
2015-07-28 16:51
453 查看
主要用到TLS,首次进入gHaveTLS为false,锁保护说明此函数很多其他函数在调用。 通过if (pthread_key_create(&gTLS, threadDestructor) != 0),中threadDestructor(void *st) 调用IPCThreadState::IPCThreadState()创建IPCThreadState对象,并将对象的索引设置为gTLS。再次进入后通过gTLS获取到IPCThreadState对象。
IPCThreadState* IPCThreadState::self() { if (gHaveTLS) { restart: const pthread_key_t k = gTLS; IPCThreadState* st = (IPCThreadState*)pthread_getspecific(k); if (st) return st; return new IPCThreadState; } if (gShutdown) return NULL; pthread_mutex_lock(&gTLSMutex); if (!gHaveTLS) { if (pthread_key_create(&gTLS, threadDestructor) != 0) { pthread_mutex_unlock(&gTLSMutex); return NULL; } gHaveTLS = true; } pthread_mutex_unlock(&gTLSMutex); goto restart; }
通pthread_setspecific(gTLS, this);gTLS与IPCThreadState对象关联了。
IPCThreadState::IPCThreadState() : mProcess(ProcessState::self()), mMyThreadId(androidGetTid()), mStrictModePolicy(0), mLastTransactionBinderFlags(0) { pthread_setspecific(gTLS, this); clearCaller(); mIn.setDataCapacity(256); mOut.setDataCapacity(256); }
相关文章推荐
- HDOJ1978 How many ways【dp or 记忆化搜索】
- ffmpeg解码流程学习总结
- android屏幕自适应
- C语言32个关键字
- SZTextView 不能输入中文解决方法
- UVa10391 复合词
- PID算法完全讲解
- Android 颜色透明度
- 使用EasyUI实现文本框内容长度验证,对文本框输入内容提示“剩余可输入字数”
- 【进阶android】Volley源码分析——Volley的缓存
- java https连接
- 用Python解析XML的几种常见方法的介绍
- scala spark编程常见问题总结
- VC 中char 与 wchar的转换
- T系列T-Swift0001
- Maven setting.xml配置说明
- kbengine 0.65 读unity3d demo的笔记
- gis
- 多线程编程 基础篇 (四)
- oracle坏块及解决办法