c++ 对象的互斥访问

首先,需要定义Mutex类:

         class Mutex {
           public:
                  Mutex() {InitializeCriticalSection(&m_cs);}
                 virtual ~Mutex() {DeleteCriticalSection(&m_cs);}
                 void Lock() {EnterCriticalSection(&m_cs);}
                 void UnLock() {LeaveCriticalSection(&m_cs);}
          private:
                 CRITICAL_SECTION m_cs;
   };

其次,进行如下调用: 

                   Mutex      mutexHandle;    //定义Mutex类对象

                   mutexHandle.Lock();

                   Sdio_Read(..., ...);

                   mutexHandle,UnLock();

                   ........

                  mutexHandle.Lock();

                 Sdio_Write(..., ...);

                 mutexHandle,UnLock();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,使用互斥锁来保护一个`std::vector`的访问可以确保线程安全。由于`std::vector`是一个可变大小的容器,多个线程同时对其进行读写操作可能导致竞争条件和数据损坏。 下面是一个使用互斥锁保护`std::vector`的示例: ```cpp #include <iostream> #include <thread> #include <vector> #include <mutex> std::vector<int> myVector; std::mutex mtx; void addToVector(int value) { std::lock_guard<std::mutex> lock(mtx); // 锁定互斥锁 myVector.push_back(value); // 在函数结束时自动释放互斥锁 } int main() { std::thread t1(addToVector, 1); std::thread t2(addToVector, 2); t1.join(); t2.join(); // 输出向量的内容 for (const auto& value : myVector) { std::cout << value << " "; } std::cout << std::endl; return 0; } ``` 在上面的示例中,`std::vector<int>`对象`myVector`是被多个线程访问的共享资源。通过在`addToVector`函数中使用`std::lock_guard<std::mutex>`来锁定互斥锁`mtx`,确保每个线程在访问和修改`myVector`之前先获得锁。这样可以避免多个线程同时修改`myVector`而导致数据不一致的问题。 使用互斥锁来保护`std::vector`的访问确保了线程安全性,但可能会带来性能开销。在某些情况下,如果读操作远远多于写操作,可以考虑使用读写锁(`std::shared_mutex`)来提高并发性能。读写锁允许多个线程同时读取共享资源,但在有线程进行写入时,其他线程无法进行读取或写入操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值