我对内核编程和使用锁编程很陌生。
在不同的功能中锁定和解锁自旋锁安全吗?我这样做是为了同步代码流。
另外,在__schedule()中使用自旋锁(锁和解锁)安全吗?让调度程序等待获取锁安全吗?
提前谢谢。
发布于 2013-11-05 10:09:40
而不是spinlock,您可以使用semaphore或mutex。对于最小的一组操作,您应该在同一个函数中使用spinlock。
发布于 2014-03-15 13:09:25
如果您的代码设计正确,从多个位置获取和释放相同的自旋锁是无害的,事实上,这就是关键所在;您可以使用单个自旋锁来实现一组类似于Linux atomic操作的函数,但需要使用任何额外的内部复杂性。只要在每个函数中获得并释放围绕共享资源的锁,它就会正常工作。
主要考虑因素是:
只要您小心地处理自旋锁--记住死锁的潜力--并且了解您在自旋锁中所做的任何事情都会影响系统延迟,那么它们就是一个非常有用的工具。
如果您知道代码中声称锁的所有区域总是完成并快速释放,那么您可以同样确信,您的代码中的任何其他部分都不会在等待锁的时间内旋转。这可能比使用互斥锁更有效。
接受自旋锁的另一个价值是它充当一个隐式内存屏障,因此,通过在操作某些资源(例如结构的一个成员)周围设置一个锁,您可以确保代码中的任何其他线程在读取/写入该资源之前也会获取锁,以查看该资源的当前状态,而不是某些由于缓存一致性问题而过时的值。
这是一个潜在的复杂问题,但希望这一解释能有所帮助。
https://stackoverflow.com/questions/19761757
复制相似问题