#include "boost/smart_ptr/detail/spinlock.hpp"
boost::detail::spinlock lock;
main(){
std::lock_guard<boost::detail::spinlock> guard(lock);
while(true)
{
i=i+100;
}
}
机器详情:
CPU:2
在线 CPU(s) 列表:0,1
每个内核的线程数:1
每个插槽的核心数:2
插座:1
在上面的代码中,当我运行时:
First instance =>
它占用了 100% 的 cpu(根据 top 命令)
Second instance =>
它花费了 97-98%,这两个实例的总和显示大约 195%-197%
Third instance =>
通过调整前两个实例的 CPU 消耗,这花费了大约 47-50%,这三个的总和接近 200%。
我的假设是,一旦自旋锁获得 cpu,它就不会被 cpu 抢占(它不会被 cpu 通过调度其他线程来切换,此时将线程(自旋锁定)保持在调度队列中),因此我期待第三个实例失败。但它运行表明前两个进程线程被抢占了。
我在哪里弄错了?