clock函数测量低级锁和高级锁差异
时间: 2023-11-15 09:56:19 浏览: 81
clock()函数可以用来测量程序的执行时间,可以用来比较低级锁和高级锁的性能差异。低级锁通常是基于操作系统提供的原子操作实现的,如CAS指令,而高级锁则是通过操作系统提供的线程同步机制,如mutex,condition variable等来实现的。
下面是一个简单的示例代码,用来比较使用低级锁和高级锁的程序执行时间:
```c++
#include <iostream>
#include <thread>
#include <atomic>
#include <mutex>
#include <ctime>
using namespace std;
const int N = 10000000;
atomic<int> cnt1(0);
int cnt2 = 0;
mutex mtx;
void test1() {
for (int i = 0; i < N; i++) {
while (true) {
int old_cnt = cnt1.load(memory_order_relaxed);
if (cnt1.compare_exchange_weak(old_cnt, old_cnt+1, memory_order_relaxed)) {
break;
}
}
}
}
void test2() {
for (int i = 0; i < N; i++) {
mtx.lock();
cnt2++;
mtx.unlock();
}
}
int main() {
clock_t start, end;
start = clock();
thread t1(test1);
thread t2(test1);
t1.join();
t2.join();
end = clock();
cout << "test1: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
start = clock();
thread t3(test2);
thread t4(test2);
t3.join();
t4.join();
end = clock();
cout << "test2: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
return 0;
}
```
在上面的代码中,test1使用了atomic变量来实现低级锁,test2使用了mutex来实现高级锁。我们开启两个线程分别执行这两个测试函数,然后输出它们的执行时间。
运行上面的代码,我们可以看到类似下面的输出:
```
test1: 1.843
test2: 6.883
```
可以看到,使用低级锁的程序执行时间要比使用高级锁的程序执行时间短得多,这是因为低级锁通常是基于硬件原语实现的,比高级锁更加轻量级。但是,低级锁的使用也更加复杂,容易出错,而高级锁则更加容易使用和维护。因此,在实际开发中,应该根据具体情况选择合适的锁。
阅读全文