【发布时间】: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