std mutex

mutex mm2;
int cale = 0;
void shared_mutex_Test(string url)
{
while (true)
{
mm2.lock();
printf(“%s–>%d\n”, url.c_str(),cale);
cale++;
mm2.unlock();
Sleep(100);
}

}

int main2()
{
std::thread t1(shared_mutex_Test, “Thread1*”);
std::thread t2(shared_mutex_Test, “Thread2*”);
t2.join();
t1.join();

}

同个线程多次调用mutex.lock,在没有unclok的时候,继续lock 并不会阻塞线程,而是线程崩溃,需要用share_mutex

C++ 中,std::mutex 是一种用于线程同步的互斥量。当一个线程正在访问某个共享资源时,可以使用 std::mutex 对这个资源进行加锁,以确保其他线程在此期间无法访问该资源,从而避免数据竞争的问题。 使用 std::mutex 一般需要以下步骤: 1. 定义一个 std::mutex 对象; 2. 在需要保护的代码块前调用 std::mutexlock() 方法,以锁住互斥量; 3. 在保护的代码块执行完毕后,调用 std::mutex 的 unlock() 方法,以释放互斥量。 例如,下面是一个简单的示例代码,展示了如何使用 std::mutex 来保护一个共享变量: ```c++ #include <iostream> #include <thread> #include <mutex> std::mutex mtx; int shared_var = 0; void increment_shared_var(int id) { for (int i = 0; i < 100000; ++i) { mtx.lock(); ++shared_var; mtx.unlock(); } } int main() { std::thread t1(increment_shared_var, 1); std::thread t2(increment_shared_var, 2); t1.join(); t2.join(); std::cout << "shared_var = " << shared_var << std::endl; return 0; } ``` 在这个例子中,我们定义了一个全局的 std::mutex 对象 mtx 和一个共享变量 shared_var,然后启动两个线程来分别对 shared_var 进行 100000 次自增操作。在每次自增操作前,我们都使用 mtx.lock() 方法来锁住互斥量,以确保只有一个线程能够访问共享变量。在自增操作完成后,我们再调用 mtx.unlock() 方法来释放互斥量。 运行这个程序,你会发现最终输出的 shared_var 值为 200000,这说明两个线程对共享变量进行了正确的并发更新,并且互斥量起到了保护作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值