• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

Linux系统中,如何确定是哪个进程对某个资源加自旋锁的?

沃尔夫斯堡的羊 2020-06-20 浏览量:440

Linux系统编程中,在同步机制中,进程可以通过应用自旋锁来保持对某个资源的锁定,调用spinlock()来实现进程同步,,,这一过程中,进程  自旋锁 资源对象三者,自旋锁本质是一个变量,可不可以是系统中的一个部(组)件,就是为了达到进程同步而设计的?还是自旋锁属于每个资源的属性?即如果进程1对某个资源调用spinlock(spinlock_t *lock)加锁,这个入参是资源对象的所具有的属性,每个描述资源对象的结构体里面都有这样的一个成员?另

2)加完锁后,可不可以获得是哪个进程加锁的?锁的持有进程是哪个?

3)spinlock(spinlock_t *lock)“自旋”即进程获取锁若获取不到,即“自旋”等待不返回,而spin_trylock()尝试去获取spin lock,如果失败,不会spin,而是返回非零值,这与“自旋”是不是矛盾?​​

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 自旋锁是个系统变量,对自旋锁进行操作的API需要实现原子操作,多核系统上面还要做屏蔽

    第二个,好像spinlock没有api获取当前等待队列的,因为spinlock锁定之后系统是不会调度出去的,不像mutex

    第三个问题,这个只是对锁的一种叫法,事实上,很多时候程序里面用自旋锁获取一个资源也是尝试上锁几次,不能让进程一直卡死的

    • 发布于 2020-07-05
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 需要注意,自旋锁主要是应用在内核管理中,即用来获取cpu核及相应资源的,并不是一般意义上的系统硬件资源,从这里才能理解什么是自旋锁。
    • 发布于2020-06-23
    • 举报
    • 评论 3
    • 0
    • 0
沃尔夫斯堡的羊 回复了 xdsnet :请教,“Linux中每个自旋锁都是spinlock_t这个数据结构表示”,说明系统中有很多自旋锁,那么这些自旋锁和资源比如某个外设,是如何对应的?在描述外设的结构体中添加一个spinlock_t的成员? 回复
xdsnet 回复了 xdsnet :我理解自旋锁主要用于短时线程内资源锁定而不引致切换或者休眠,所以主要还是单进程中对线程资源(主要是CPU、寄存器等等管理)中应用 回复
xdsnet 回复了 沃尔夫斯堡的羊 :此外,可以知道它一般不会获取到到底那个线程锁住了相应资源(临界区资源)。此外那个结构体的实质最终其实就是一个 volatile unsigned int 类型值。 回复

相关问题

问题达人换一批

Linux系统中,如何确定是哪个进程对某个资源加自旋锁的?