理解背景:单线程代码所运行的系统,在内核里认为上层运行的程序是单线程进程,此时改为多线程进程,是用户级多线程。
存在的问题和解决方法如下:
问题一:全局变量问题:原来是对整个程序是全局变量的变量,现在只对某个线程而言是全局变量
解决1:全面禁止全局变量:不一定合适,因为和许多已有的软件冲突,是因为已有的软件有全局变量吗?WHY?待调查。
解决2:为每一个线程赋予其私有的全局变量。这是与原来的不同种类的变量的作用域不同的。
如何设置这种中间作用域呢?
1)为全局变量分配一块内存,并将这块内存的地址作为每个过程(函数)的参数传递过去。该方案虽不漂亮,但是可行。
2)引入新的库过程,通过这些库过程,可以实现创建、设置和读取这些线程范围的全局变量。
问题二:库过程不可重入问题:所谓的不可重入,就是如果该过程没有调用结束,CPU转而去调用另一线程的该库过程,会出现错误。例如两个线程通过该库过程都要往内核的一个缓冲区写入,此时缓冲区里第一个线程写入的值,被第二个线程写入的值覆盖,出现信息丢失。