1.我的疑问
我很好奇,好奇为什么只有InputReaderThread单一线程维护事件和设备并且其持有InputReader对象又是单例,但却需要在多数方法中使用了AutoMetux来加强线程安全。
2.探索发现
1.原因是我还并没有真正理解Android的Metux,同一个Metux对象可以锁定多段代码,而不仅仅锁定一个函数或一个代码块那么简单。
2.InputReader对象一些私有方法会生成(写操作)一些设备信息及其他相关信息运行在InputReaderThread线程中,而InputReader对象提供许多public方法方便其他线程获取这些信息,为了保证其他线程能够获取到正确的信息,写入时不能读取,反之亦然。所以我们需要Metux互斥量。这就是为什么只有一个写线程还需要加锁,因为有其他线程在读取一些信息。
3.android /frameworks /.../utils 下有 Thread和Metux相关内容,在android源码环境下进行多线程编程,可考虑使用。其实,frameworks下实现的Thread和Metux均封装pthread库实现的。
4.我觉得还是先阅读APUE,Unix进程间通信吧,很多基本概念都没有弄清楚。