我有一个类似于此的简单自旋锁实现:
class Spinlock{
std::atomic_flag flag;
public:
Spinlock(): flag(ATOMIC_FLAG_INIT) {}
~Spinlock() {}
void lock(){
while(flag.test_and_set(std::memory_order_acquire));
}
void unlock(){
flag.clear(std::memory_order_release);
}
};我的问题类似于互斥体上的this one,但对于自旋锁:
是否保证线程2将在线程3之前获得自旋锁?
如果没有,是否有任何锁实现来保证获取的顺序?
发布于 2019-04-25 05:01:25
不,没有排队或排序的任何类型,因为普通的自旋锁实际上只是重复的竞赛;每次尝试获得失败,没有记忆被转移到下一次尝试,它只是赛车和希望获胜。线程2或3可以获得它,几乎相等的可能性,即使线程2已经在它上旋转了一分钟,线程3在微秒。
https://stackoverflow.com/questions/55842075
复制相似问题