
一个执行单元要想访问被自旋锁保护的共享资源,必须先得到锁,在访问完共享资源后,必须释放锁。如果在获取自旋锁时,没有任何执行单元保持该锁,那么将立即得到锁;如果在获取自旋锁时锁已经有保持者,那么获取锁 *** 作将自旋在那里,直到该自旋锁的保持者释放了锁。由此可以看出,自旋锁是一种比较低级的保护数据结构或代码片段的原始方式,这种锁可能存在两个问题:
死锁。试图递归地获得自旋锁必然会引起死锁:递归程序的持有实例在第二个实例循环,以试图获得相同自旋锁时,不会释放此自旋锁。在递归程序中使用自旋锁应遵守下列策略:递归程序决不能在持有自旋锁时调用它自己,也决不能在递归调用时试图获得相同的自旋锁。此外如果一个进程已经将资源锁定,那么,即使其它申请这个资源的进程不停地疯狂“自旋”,也无法获得资源,从而进入死循环。
过多占用cpu资源。如果不加限制,由于申请者一直在循环等待,因此自旋锁在锁定的时候,如果不成功,不会睡眠,会持续的尝试,单cpu的时候自旋锁会让其它process动不了. 因此,一般自旋锁实现会有一个参数限定最多持续尝试次数. 超出后, 自旋锁放弃当前time slice. 等下一次机会。
会产生lock文件说明有程序在运行,不存在就说明没有。lock文件被很多的 *** 作系统和应用程序所使用来锁住某些资源,比如一个文件或者一个设备。典型的一般是没有包含任何数据的一个空的文件,但是可能也包含lock文件的属性和设置。
Lock文件表明一个应用程序中某个资源在锁释放之前是不能被应用的。这对那些需要并发访问临界资源的应用程序是十分有用的。
对于文件锁,应用程序会创建一个新文件,然后将此文件在原有命名的基础上添加一个.lock后缀,比如,example.file文件的锁文件将是example.file.lock。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)