你去看 read方法,返回就是一个int -1表示没数据
先看一个例子:假设两个线程t1\t2都要对num进行操作(增1),t1和t2都各自对num修改10次,num最终的值应该为20.紧接着我们把10次改为100000000次,由于多线程访问,有可能不一样的结果。
问题分析:
问题产生的原因就是没有控制多个线程对同一资源的访问,对数据造成破坏,
使得线程运行的结果达不到预期。这种现象我们称为“线程不安全”
解决思路:
1.t1被调用的时候,获取g_num=0, 然后上一把锁,即不允许其它线程操作g_num。
2.对num进行加1
3.解锁,g_num = 1,其它的线程就可以使用g_num的值,而且g_num的值不是原来的0
4.同理其它线程在对num进行修改时,都要先上锁,处理完成后再解锁。
在上锁的整个过程中,不允许其它线程访问,保证了数据的正确性。
在读取文件数据的时候必须是顺序的,不可能说先读取第一个字节,后读取倒数第二个字节。
因为一个字节的取值范围是0到255,用-1表示文件结束。