使用自旋锁来锁定在不同线程中同时使用的变量?
Posted
技术标签:
【中文标题】使用自旋锁来锁定在不同线程中同时使用的变量?【英文标题】: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
的参数是指向锁本身的指针。除了锁定或解锁之外,您实际上无法对锁执行任何类型的操作,当然同时尝试这些操作是安全的。
如果您询问自旋锁要保护的数据对象上的操作,那么不,获取锁不会以任何方式暂停、中断或回滚那些操作。因此,其他线程首先应该在执行这些操作之前锁定自旋锁。
【参考方案1】:
不具体了解Linux kernel spin_lock()
,但在几乎所有编程环境中,mutex locking is advisory。这意味着,锁定一个锁永远不会阻止任何事情,除非它阻止其他线程同时锁定同一个锁。如果您想使用锁来保护某些变量或数据结构,则完全由程序员负责确保系统中的任何代码都不会访问数据,除非锁被锁定。
【讨论】:
以上是关于使用自旋锁来锁定在不同线程中同时使用的变量?的主要内容,如果未能解决你的问题,请参考以下文章