这不是经验分享帖,也不是什么教学帖(没资格),这应该算是笔记帖,原因如下:
对于一个非计算机科班的人,“锁”这个东西有点难理解,而且与锁有关的知识点太多了,多线程、多进程、同步、消费者与生产者模式、队列等等......,为了彻底搞明白这个锁到底是啥,在中国大学网站上听了几节计算机操作系统中关于并发控制的课程,至今都还是觉得云山雾里...,算了,理解多少算多少,写在这里,希望能和看到的人交流交流....
临界资源:多个进程或者线程共享的资源称为临界资源
临界区:进程或者线程中访问临界资源的代码块称为临界区
为了完成多个线程对临界资源的互斥使用,设置整型变量为flag,0代表临界资源可用,1代表临界资源不可用;那在代码进入临界区前,首先判断这个整型变量flag的值,如果为0,代表这个资源处于空闲状态,将flag置为1,表示临界资源已经被征用,其他的线程将不能够使用临界资源,该临界区的代码执行,待该线程临界区代码执行完成后,再将flag置为0,表示其他的线程可以使用临界资源了;
如果为1,代表这个资源被其他的临界区代码占用着,该临界区的代码不能被执行;
为了保证代码能够在不允许进入临界区的时候,暂停后面的语句执行,引入while语句。
利用Python代码表述:
由于操作系统的中断机制,在t1中执行if flag=0时,发生中断,CPU执行t2了,这就导致两个线程能够同时执行临界区代码,为了能够实现互斥,将整个while语句封装成一个函数,实现系统级别的原子操作,即锁原语,那么锁的底层机制应该就是这样的了(本人的理解)
可以看到,当t1执行临界区代码时,如果轮到t2执行了,在进入临界区之前,会一直判断临界区资源是否可用(while循环),使该线程处于忙等(busy-waiting)的状态,白白浪费CPU资源。
参考:计算机操作系统_中国大学MOOC(慕课)www.icourse163.org