【问题标题】:Using spin lock to lock a variable being concurrently used in a different thread?使用自旋锁来锁定在不同线程中同时使用的变量?
【发布时间】:2021-12-13 22:37:07
【问题描述】:

假设您调用 spin_lock(&key) 并且 key 正在同时在不同的线程中对其执行某种类型的操作。其他线程是否正在暂停/中断?

正在更改或使用密钥的其他线程会发生什么?比如线程调用copy_to_user(key)、copy_from_user(key)或者kmallocing/kfreeing key?

【问题讨论】:

  • 您应该只对排他锁内的共享数据执行操作。
  • 你说的是内核内部的spin_lock?我认为spin_lock 的参数是指向锁本身的指针。除了锁定或解锁之外,您实际上无法对锁执行任何类型的操作,当然同时尝试这些操作是安全的。
  • 如果您询问自旋锁要保护的数据对象上的操作,那么不,获取锁不会以任何方式暂停、中断或回滚那些操作。因此,其他线程首先应该在执行这些操作之前锁定自旋锁。

标签: c linux multithreading concurrency spinlock


【解决方案1】:

不具体了解Linux kernel spin_lock(),但在几乎所有编程环境中,mutex locking is advisory。这意味着,锁定一个锁永远不会阻止任何事情,除非它阻止其他线程同时锁定同一个锁。如果您想使用锁来保护某些变量或数据结构,则完全由程序员负责确保系统中的任何代码都不会访问数据,除非锁被锁定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2016-04-10
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多