首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >旋锁能保证收购顺序吗?

旋锁能保证收购顺序吗?
EN

Stack Overflow用户
提问于 2019-04-25 04:57:52
回答 1查看 238关注 0票数 2

我有一个类似于此的简单自旋锁实现:

代码语言:javascript
运行
复制
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,但对于自旋锁:

  • 线程1调用lock()
  • 在线程1调用unlock()之前,Thread 2和3都调用lock()。

是否保证线程2将在线程3之前获得自旋锁?

如果没有,是否有任何锁实现来保证获取的顺序?

EN

回答 1

Stack Overflow用户

发布于 2019-04-25 05:01:25

不,没有排队或排序的任何类型,因为普通的自旋锁实际上只是重复的竞赛;每次尝试获得失败,没有记忆被转移到下一次尝试,它只是赛车和希望获胜。线程2或3可以获得它,几乎相等的可能性,即使线程2已经在它上旋转了一分钟,线程3在微秒。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55842075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档