正在回答 回答被采纳积分+1
同学你好~
线程简单的可以理解为,相互独立的任务。这里举个小例子:
假如某一天,皇帝想要宴请群臣,点名要满汉全席。此时,显然将近七百道菜不会是一个厨子完成,那么对于满汉全席这个任务来讲,就可以拆分成多个小任务。这里整个筵席就是进程,每个厨子就是线程。
厨子之间相互独立,各自做各自的菜品,互相是不影响的。这就是线程间相互独立的特征。
但是,如果A厨子发现筵席中还没有四喜丸子,自己就去做四喜丸子了。但是在A还没做好的时候,B也发现缺少四喜丸子,他也去做四喜丸子了。当A厨子做完之后,交给传菜的人,菜就被拿去放在筵席上了。此时B也做好了,他并不知道A已经做好了,也把这道菜给了传菜的人,这道菜也被放在筵席上了。此时就会发现,满汉全席本身就不允许有重复菜品的,结果由于A和B两个厨子都对整个筵席做更改,出现了重复。
这里,筵席就是同时被两个线程所共同访问的对象,而A和B两个厨子就是两个线程。此时可以发现,两个线程同时对同一对象进行操作,就出现了问题。这也就是所谓的,并发访问问题。
解决并发访问问题的方式有多种,这里可以采用独占资源的方式,也就是加锁的方式解决。
例如上面的案例中,如果A厨子发现没有四喜丸子,那么他将所有制作四喜丸子的材料都拿走,对资源进行独占。此时即使B厨子也需要做四喜丸子,但是没有材料,那么B厨子只能等A厨子做完,他才能拿到被独占的材料。当A将材料退回的时候,筵席上同时也就多了四喜丸子,B厨子也就不会再做这道菜了,此时就没有重复了。
这里A独占所有材料的过程,就是多线程间加锁的过程,这些被独占的材料就是锁。A和B两个厨子争夺这些材料的过程,就是线程争夺锁标记的过程。
以上就是线程和并发访问的解释,希望可以帮到同学。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星