数据结构和设计方面的麻烦,求帮助:)
----------------------------------------------------------------------------------------
有一结构体Object_t:
typedef struct
{
... ;
}Object_t;
有一全局数组g_Table:
static Object_t g_Table[5];
给上层提供的三个接口:
CreateObject(u32* ulHandle); //create一个obj,返回给上层的是ulHandle值,实际就是g_Table数组的下标(0,1,2,3,4)
DestroyObject(u32 ulHandle); //销毁一个obj,传入参数为create时返回的ulHandle值
UseObject(u32 ulHandle); //执行一个操作,传入参数为create时返回的ulHandle值
void UseObject(u32 ulHandle)
{
Object_t* pObj = GetObj(ulHandle); //根据ulHandle从g_Table里取得具体的Object_t的地址返回回去
operate1(pObj);
operate2(pObj);
operate3(pObj);
operate4(pObj);
return;
}
----------------------------------------------------------------------------------------
现有结构大致是这样,但是多线程问题越来越严重,在UseObject执行过程中,另外线程可能会随时DestroyObject掉这个Obj,
所以现在想给Object_t内部加个mutex,保护结构体自身。
现在关于加锁,难题主要有俩:
1是怎么能区分两个不同的obj,比如UseObject在执行完operate2(pObj)未执行operate3(pObj)时,被另一个线程destroy掉又重新create,
由于create的原理就是从g_Table里找个空闲的obj返回给上层,所以的ulhandle和原来相同。pObj也也许有效,之前的线程可以继续执行operate3(pObj),
但很明显已经不是之前那个obj了。
2.有的操作需要先unlock再lock,比如
void UseObject(u32 ulHandle)
{
Object_t* pObj = GetObj(ulHandle);
OS_Lock(pObj->hLock);
operate1(pObj);
operate2(pObj);
OS_Unlock(pObj->hLock);
operate3(pObj); //由于operate3(pObj)是阻塞操作,需要暂时unlock,执行完再lock上,但是这时就可能被其它thread操作
OS_Lock(pObj->hLock);
operate4(pObj);
OS_Unlock(pObj->hLock);
return;
}
这种情况,是不是mutex已经不够用了? 比如引用计数什么的解决?
一个是operate3(pObj)执行完后需要重新GetObj(ulHandle),重新检查下该ulHandle还是否合法?
二是一旦unlock, operate3(pObj)本身就已经很不安全了
相关推荐
园区管理如何通过数据分析提升招商效率与运营质量?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
央企如何利用数据分析工具优化科技研发方向与产业布局?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
基于ADMM应用于水蜜桃采摘配送联合优化问题研究(Matlab代码实现)
内容概要:本文研究了基于交替方向乘子法(ADMM)的水蜜桃采摘与配送联合优化问题,并提供了完整的Matlab代码实现。通过构建整合农业生产中采摘任务分配与物流配送路径规划的数学模型,采用ADMM算法进行分布式求解,显著提升了计算效率与问题扩展性。文中系统阐述了问题建模过程、目标函数与约束条件的设计、ADMM算法的迭代求解机制,并通过仿真实验验证了该方法在降低整体运营成本与提升供应链响应速度方面的有效性,为智慧农业背景下的农产品供应链一体化优化提供了理论支持与实践范例。; 适合人群:具备一定运筹优化、农业工程或物流管理基础知识,熟悉Matlab编程的高校研究生、科研人员及农业科技企业技术人员。; 使用场景及目标:①应用于智慧农业场景下的作物采摘与冷链物流联合调度;②作为学习ADMM算法在分布式优化中应用的教学案例;③为解决类似农产品供应链优化问题提供模型与代码参考; 阅读建议:建议读者结合提供的Matlab代码逐模块阅读,重点关注问题建模与ADMM算法实现部分,可通过修改参数或测试不同规模案例来加深理解,并尝试将其拓展至其他农作物或更复杂的供应链网络中。
新能源纯电动汽车驾驶员模块、整车控制器、减速器模块、车速模块等建模Simulink仿真模型
内容概要:本文详细介绍了一个基于Simulink的新能源纯电动汽车仿真模型,重点涵盖了驾驶员模块、整车控制器、减速器模块和车速模块等核心部件的建模与仿真。该模型采用模块化设计理念,实现了对电动汽车动力传动系统与整车控制逻辑的高精度模拟,可用于车辆动力学分析、控制策略验证及系统性能评估。模型紧密结合工程实际需求,构建了完整的仿真框架,支持在不同驾驶工况(如加速、减速、爬坡等)下测试车辆动态响应,有效提升了整车控制系统的设计效率与可靠性,具有较强的工程应用价值。; 适合人群:具备一定车辆工程或自动化背景,从事新能源汽车控制、系统仿真或机电一体化研究的研发人员及高校研究生。; 使用场景及目标:①用于新能源汽车整车控制策略的开发与验证;②支持动力系统匹配分析与性能优化;③适用于教学演示、科研项目及工程原型开发中的动态仿真需求。; 阅读建议:建议使用者熟悉Simulink基本操作与车辆动力学基础知识,结合实际控制需求逐步调试各模块参数,并通过典型工况(如加速、减速、爬坡)验证模型的有效性与稳定性。
技术转移机构如何精准定位潜在技术需求,拓展服务范围?.docx
技术转移机构如何精准定位潜在技术需求,拓展服务范围?


其它技术问题
