lock free

 1 #include <thread>
 2 #include <iostream>
 3 #include <mutex>
 4 #include <atomic>
 5 #include <chrono>
 6 
 7 using namespace std;
 8 
 9 #ifdef _LOCK_FREE
10 
11 atomic<int> i = 0;
12 
13 void foo() {
14     int count = 10000000;
15     while (count--)
16     {
17         i++;
18     }
19 }
20 
21 int main()
22 {
23     chrono::steady_clock::time_point start_time = chrono::steady_clock::now();
24 
25     thread thread1(foo);
26     thread thread2(foo);
27 
28     thread1.join();
29     thread2.join();
30 
31     cout << "i = " << i << endl;
32 
33     chrono::steady_clock::time_point end_time = chrono::steady_clock::now();
34     chrono::duration<double> time_span = chrono::duration_cast<chrono::microseconds>(end_time - start_time);
35     cout << "lock free elpased time: " << time_span.count() << " ms" << endl;
36 
37     system("pause");
38 
39     return 0;
40 }
41 #endif // _LOCK_FREE
42 
43 
44 
45 #ifdef _MUTEX_LOCK
46 int i = 0;
47 mutex g_mutex;
48 
49 
50 void foo() {
51     int count = 10000000;
52     while (count--)
53     {
54         g_mutex.lock();
55         i++;
56         g_mutex.unlock();
57     }
58 }
59 
60 int main()
61 {
62     chrono::steady_clock::time_point start_time = chrono::steady_clock::now();
63 
64     thread thread1(foo);
65     thread thread2(foo);
66 
67     thread1.join();
68     thread2.join();
69 
70     cout << "i = " << i << endl;
71 
72     chrono::steady_clock::time_point end_time = chrono::steady_clock::now();
73     chrono::duration<double> time_span = chrono::duration_cast<chrono::microseconds>(end_time - start_time);
74     cout << "mutex lock elpased time: " << time_span.count() << " ms" << endl;
75 
76     system("pause");
77 
78     return 0;
79 }
80 #endif _MUTEX_LOCK

 

转载于:https://www.cnblogs.com/neverdizzy/p/9108239.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LockLock-free是并发编程中的两个概念。 Lock是一种同步机制,用于保护共享资源,确保在同一时间只有一个线程可以访问该资源。当一个线程获得了锁之后,其他线程需要等待锁的释放才能继续执行。这种方式可以避免多个线程同时访问共享资源导致的数据竞争和不一致性。然而,使用锁可能会导致线程的阻塞和等待,从而降低并发性能。 Lock-free是一种无锁的同步机制,它允许多个线程同时访问共享资源,而不需要等待锁的释放。在lock-free的设计中,每个线程可以独立地进行操作,而不会被其他线程的操作所阻塞。这种方式可以提高并发性能,减少线程的等待时间。在lock-free的实现中,通常使用原子操作和无锁数据结构来确保线程之间的同步和一致性。 Lock-free是wait-free的子集,wait-free是一种更严格的无锁同步机制。在wait-free的设计中,每个线程都可以在有限的步骤内完成自己的工作,而不受其他线程执行速度或负载水平的影响。这种方式可以确保每个线程都能在有限的时间内完成操作,而不会被其他线程的阻塞所影响。 总结来说,Lock是一种阻塞式的同步机制,需要等待锁的释放才能继续执行,而Lock-free是一种非阻塞式的同步机制,允许多个线程同时访问共享资源。在并发编程中,根据具体的需求和性能要求,可以选择使用LockLock-free来实现线程之间的同步和共享资源的访问。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* *3* [lock-free vs wait-free](https://blog.csdn.net/qq_37026934/article/details/124267320)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值