L.K*_*Koh 2 c++ multithreading c++11
我有一个类似于以下内容的简单自旋锁实现:
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);
}
};
Run Code Online (Sandbox Code Playgroud)
我的问题是类似这样一个互斥锁但自旋锁:
是否可以保证线程2在线程3之前获得自旋锁?
如果不是,是否有任何可以确保获取顺序的锁定实现?
不,没有任何排队或排序方法,因为普通的自旋锁实际上只是重复的比赛。每次尝试失败时,都不会将记忆转移到下一次尝试,这只是在竞速并希望获胜。即使线程2在其上旋转了一分钟,而线程3在微秒上旋转,线程2或3也可以大致相等的概率获取它。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |