21xrx.com
2024-11-10 00:35:19 Sunday
登录
文章检索 我的文章 写文章
C++锁机代码
2023-06-23 18:29:23 深夜i     --     --
C++ 锁机 代码 多线程 互斥量

C++是一种面向对象编程语言,被广泛用于开发高性能应用程序。在多线程编程中,为了保护共享资源不被多个线程同时访问而引发竞争条件问题,C++的锁机制成为了重要的工具之一。

锁机制可以确保同一时刻只有一个线程在访问共享资源,从而避免了多个线程同时访问引发的竞争条件问题。在C++中,最常用的锁是互斥锁(Mutex Lock)和信号量(Semaphore),这里我们将介绍互斥锁。

互斥锁的使用方法如下:

1.定义一个mutex变量


#include <mutex>

std::mutex mutex_name;

2.在需要保护共享资源的代码块前使用lock()函数来锁定互斥锁,在代码块执行完毕后使用unlock()函数来释放互斥锁。


mutex_name.lock();

//访问共享资源的代码块

mutex_name.unlock();

如果不使用互斥锁,可能会在多个线程中同时访问共享资源,导致数据的不一致或错误。使用锁机制可以避免这种情况的发生。

例如,下面的代码利用互斥锁来保护共享变量的访问:


#include <iostream>

#include <thread>

#include <mutex>

std::mutex mtx; //定义一个互斥锁

void func(int& count)

{

  for(int i = 0; i < 1000; i++)

  {

    mtx.lock(); //锁住互斥锁

    count++; //修改共享变量

    mtx.unlock(); //释放互斥锁

  }

}

int main()

{

  int count = 0;

  std::thread t1(func, std::ref(count)); //创建线程1

  std::thread t2(func, std::ref(count)); //创建线程2

  t1.join(); //等待线程1执行完毕

  t2.join(); //等待线程2执行完毕

  std::cout << count << std::endl; //输出结果

  return 0;

}

以上代码创建了两个线程,它们访问共享变量count并对其进行累加操作,最后输出结果。由于使用了互斥锁,两个线程对count变量的修改都是互斥的,避免了竞争条件问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复