c++共享锁的使用

c++11未提供共享锁的实现,先使用boost的共享锁。

#include <boost/thread/shared_mutex.hpp>
boost::shared_mutex _mutex;
boost::shared_lock mylock(_mutex);


C++使用锁或者避免共享资源的例子非常多,以下是其中两个例子: 1. 使用锁: ```c++ #include <iostream> #include <thread> #include <mutex> using namespace std; mutex mtx; // 定义一个互斥锁 void print_number(int num) { mtx.lock(); // 上锁 for (int i = 1; i <= num; ++i) { cout << i << " "; } cout << endl; mtx.unlock(); // 解锁 } int main() { thread t1(print_number, 10); thread t2(print_number, 10); t1.join(); t2.join(); return 0; } ``` 上面的代码中,两个线程t1和t2都会执行print_number函数,打印出从1到10的数字。由于cout是一个共享资源,如果不使用锁进行同步,那么就可能会出现输出顺序错乱的情况。通过定义一个互斥锁,对cout进行加锁和解锁,可以保证输出的顺序正确。 2. 避免共享资源: ```c++ #include <iostream> #include <thread> using namespace std; void print_number(int num) { for (int i = 1; i <= num; ++i) { cout << i << " "; } cout << endl; } int main() { thread t1(print_number, 10); thread t2(print_number, 10); t1.join(); t2.join(); return 0; } ``` 上面的代码中,两个线程t1和t2都会执行print_number函数,打印出从1到10的数字。由于cout是一个共享资源,如果不使用锁进行同步,那么就可能会出现输出顺序错乱的情况。但是这里我们并没有使用锁,而是避免了共享资源,即每个线程都有自己的cout对象,不会出现竞争的情况,因此输出的顺序也是正确的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值