全局变量上(读写)锁

globel_param.h
#pragma once
#ifndef GLOBE_PARAM_H
#define GLOBE_PARAM_H
#include<pthread.h>
#include"tensorrt_sdk_error_code.h"



typedef struct Globel_Float_
{
    float nms_thresh_globe;
    float conf_thresh_globe;
    pthread_rwlock_t rwlock;   //声明读写锁
}Globel_Float;


Error_Code init_lock();

Error_Code read_globel_param( float &nms,float& conf ); //读者加读锁

Error_Code set_globel_param(float &nms,float& conf); //写者加写锁

Error_Code destory_lock();




//};

#endif // TENSORRT_SDK_H
globe_param.cpp
#include"globe_param.h"

Globel_Float nms_conf;

Error_Code init_lock(){
//    nms_conf.rwlock = PTHREAD_RWLOCK_INITIALIZER;
    pthread_rwlock_init(&nms_conf.rwlock, NULL);   //初始化读写锁
    return OPERATION_SUCCESS;
}

Error_Code destory_lock(){
    pthread_rwlock_destroy(&nms_conf.rwlock);      //销毁读写锁
    return OPERATION_SUCCESS;
}

Error_Code read_globel_param( float &nms,float& conf ) //读者加读锁
{
    pthread_rwlock_rdlock( &nms_conf.rwlock );
    nms = nms_conf.nms_thresh_globe;
    conf = nms_conf.conf_thresh_globe;
    pthread_rwlock_unlock( &nms_conf.rwlock );
    return OPERATION_SUCCESS;
}

Error_Code set_globel_param(float &nms,float& conf) //写者加写锁
{
    pthread_rwlock_wrlock( &nms_conf.rwlock );
    nms_conf.nms_thresh_globe = nms;
    nms_conf.conf_thresh_globe = conf;
    pthread_rwlock_unlock( &nms_conf.rwlock );

    return OPERATION_SUCCESS;
}

在使用中遇到一个bug提示,大概是这样的:multiple definition of `xxxx`

多重定义,我找了半天也没看到多次定义的地方,然后参考了下面这篇文章,其实就是将全局变量的声明和定义分离开;

参考:https://blog.csdn.net/mantis_1984/article/details/53571758,下面是解决方法:

即在.c文件中声明变量,然后在头文件.h所有的变量声明前加上extern,注意在.h文件中就不要对变量进行初始
化赋值了。然后其他需要使用全局变量的.c文件中包含.h文件即可。编译器会为.c生成目标文件,然后链接时,
如果该.c文件使用了全局变量,链接器就会链接到此.c文件。其他文件需要使用此全局变量也是同样的方式,目
的其实只有一个,就是使变量在内存中唯一化。

然后就有了上面的代码;

在别处调用时只需要加入globel_param.h这个头文件;

注意:第一次使用的时候需要初始化锁,最后不用了就调用释放锁的函数,中间就可以加读锁/写锁; 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MPU(Memory Protection Unit)是一种硬件组件,用于在嵌入式系统中提供内存保护。它可以帮助保护全局变量的安全性,防止非授权的访问。 下面是一些常用的方法来保护全局变量: 1. 使用权限控制:MPU可以设置不同的访问权限,例如只读、读写或禁止访问。通过将全局变量设置为只读,可以防止未经授权的写入操作。这可以防止不小心或恶意地修改全局变量的值。 2. 分区:MPU可以将内存划分为多个区域,并为每个区域分配不同的权限。全局变量可以分配到一个独立的受保护的区域中,只有特定的任务或代码可以访问它。这样可以限制对全局变量的访问,确保只有授权的任务能够修改它。 3. 使用信号量或互斥:在多任务环境中,使用信号量或互斥来控制对全局变量的访问是一种常见的方式。通过在访问全局变量之前获取或信号量,并在访问完成后释放或信号量,可以确保同一时间只有一个任务能够访问全局变量。 4. 数据加密:如果全局变量包含敏感信息,可以使用加密算法对其进行加密。只有经过授权的任务才能够解密和使用数据。这样可以保护全局变量的机密性,防止未经授权的访问。 综上所述,MPU可以通过权限控制、分区、信号量或互斥以及数据加密等方式来保护全局变量的安全性。通过合理的配置和使用MPU,可以提高系统的安全性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫与橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值