pthread_cond_signal 段错误

Sander Sander 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我写了个lib, 封装了一个线程类
#include "ExThread_Linux.h"
#include <sys/types.h>
#include <unistd.h>

#define EXIT_THREAD_TIMEOUT 2000//2second
//--------------------------------------------------------------------------------------------
CExThread_Linux::CExThread_Linux(void* pCallback, void* pOwner)
{
m_pCallbackFunc = (CallBackDoWithData)pCallback;
m_pOwner = pOwner;

m_bCond = false;
pthread_mutex_init(&m_mutex, NULL);
pthread_cond_init(&m_cond, NULL);
m_bThreadStart = true;

}

CExThread_Linux::~CExThread_Linux()
{
DestroyThread();
}

//--------------------------------------------------------------------------------------------
int CExThread_Linux::DestroyThread()
{
if (m_thread_id)
{
m_bThreadStart = false;
SetSignal();
pthread_join(m_thread_id, NULL);
pthread_mutex_destroy(&m_mutex);
pthread_cond_destroy(&m_cond);
}

return 1;
}

//--------------------------------------------------------------------------------------------
bool CExThread_Linux::CreateThread()
{
int ret = 0;

pthread_attr_t attr;
sched_param param;

ret = pthread_create(&m_thread_id, NULL, Thread, this);
if(ret!=0)
{
printf("create pushthread error!\n");
return false;
}

int n_MaxPriority = 0;
sched_get_priority_max(n_MaxPriority);
pthread_attr_getschedparam(&attr, ¶m);
param.sched_priority = n_MaxPriority;
pthread_attr_setschedparam(&attr, ¶m);

return true;
}

void CExThread_Linux::SetSignal()
{
pthread_cond_signal(&m_cond);
//printf("SetSignal-------d\r\n");

}

//--------------------------------------------------------------------------------------------
bool CExThread_Linux::SetEventAndTimeout(bool bCondition, const struct timeval* tv)
{
m_bCond = bCondition;
if (!m_bCond && (struct timeval*)tv==NULL)
return false;

m_timeout = (struct timeval*)tv;
return true;
}

//--------------------------------------------------------------------------------------------
void* CExThread_Linux::Thread( void* lParam )
{
int nRetVal = 0;
int nCallBackResult = 0;
struct timeval now;

CExThread_Linux* pThis = ( CExThread_Linux* )lParam;
if( !pThis )
return 0;

if (!pThis->m_bCond)
{
while(true)
{
now.tv_sec = pThis->m_timeout->tv_sec;
now.tv_usec = pThis->m_timeout->tv_usec;
int nRetVal = select( 0, NULL , NULL , NULL , &now);
if ( -1 == nRetVal )
{
printf( "CListonSocket::Select Error\n" );
return false;
}

pThis->m_pCallbackFunc(pThis->m_pOwner);
}
}
else
{
while (true)
{
pthread_mutex_lock(&(pThis->m_mutex));
pthread_cond_wait(&(pThis->m_cond),&(pThis->m_mutex));
pthread_mutex_unlock(&(pThis->m_mutex));
if (!pThis->m_bThreadStart)
break;

if ( pThis->m_pCallbackFunc )
{
pThis->m_pCallbackFunc(pThis->m_pOwner);
}

}

}

return 0;
}
...全文

相关推荐

linux先进的编程技巧.rar

linux先进的编程技巧.rarlinux先进的编程技巧.rarlinux先进的编程技巧.rarlinux先进的编程技巧.rar

lixiaoxiao123

SWJTU操作系统实验通关:Linux进程同步、调度与Shell判分

操作系统实验的本质,是把进程与线程、同步互斥、调度和内存管理从课本概念变成可编译运行的代码。Linux 通过 fork、pthread、sem_* 等系统调用提供并发原语,PV 操作、时间片轮转、FIFO/LRU 页面置换和银行家算法则分别对应资源协调、CPU 分配、缺页控制与安全状态判断。掌握这些原理,能定位竞态、死锁、僵尸进程和输出格式偏差;配合 Makefile、gdb、strace、valgrind 与自动对拍,可提升工程调试与判分稳定性。面向生产者消费者、进程调度、页面置换、迷你 Shell 等场

周传炽

双闭环PWM整流器VOC控制 +SVPWM调制仿真(Simulink仿真实现)

内容概要:本文围绕城市空中交通环境下多无人机协同路径规划问题展开深入研究,重点探讨了在包含建筑物、禁飞区、动态威胁等复杂约束条件下,如何利用仿生优化算法(如布谷鲶鱼优化算法CCO、灰雁优化算法GGO、田忌赛马优化算法THRO)实现安全、高效的多无人机路径规划。文章提出了一种分层规划策略,融合全局路径规划与局部动态避障机制,构建了综合考虑路径长度、威胁暴露度、高度变化及地形碰撞风险的多目标优化模型。通过Matlab仿真平台对多种算法进行对比实验,系统评估了各算法在路径安全性、收敛速度、优化性能和鲁棒性方面的表现,并深入分析了现有方法的局限性,对未来研究方向如动态环境适应、通信受限下的分布式协同等进行了展望。; 适合人群:具备一定编程基础,熟悉Matlab/Simulink仿真环境,从事无人机系统设计、智能交通、自动化控制、路径规划算法研究等相关领域的科研人员及高校研究生。; 使用场景及目标:①应用于城市空中交通系统中多无人机的协同任务执行与动态避障;②为复杂威胁环境下多智能体系统的路径规划提供先进算法支持与仿真验证框架;③辅助研究人员深入理解并复现仿生优化算法在高维、多约束路径规划问题中的具体实现与性能差异。; 阅读建议:此资源以Matlab代码实现为核心,紧密结合理论建模与仿真实验,建议读者在学习过程中重点关注算法的设计原理、参数调优策略及仿真结果的可视化分析,结合文中提供的实验数据进行横向对比,以深刻把握不同仿生算法的搜索机制、适用场景及其在实际工程应用中的潜力与挑战。

稷下科研社

仿真+课设Multisim直流可调稳压电源(0-15V)仿真设计基于LM317+LM337【仿真+课程报告】

内容概要:本文详细介绍了一种基于LM317(正压调节)和LM337(负压调节)芯片的Multisim直流可调稳压电源仿真设计方案,输出电压范围为0-15V,具备完整的电路仿真模型与课程设计报告。设计涵盖线性稳压电源的核心原理,包括电压调节机制、元件参数配置、双极性电源构建及仿真测试流程,突出理论与实践结合。文档还附带丰富的扩展资源,如三相PWM整流器、函数信号发生器等仿真项目,并提供百度网盘链接用于获取全套资料,适用于电子类课程设计与自主学习。整体内容系统性强,注重仿真操作指导与工程实践能力培养。; 适合人群:电子信息工程、自动化、电气工程及其相关专业的本科生、专科生,以及正在进行模拟电子技术课程设计或毕业设计的学生。; 使用场景及目标:①深入理解线性稳压电源的工作原理与设计方法;②掌握Multisim软件在电路仿真中的实际应用;③完成基于LM317/LM337的可调稳压电源课程设计任务;④提升模拟电路系统的设计、仿真与分析综合能力; 阅读建议:建议结合Multisim软件同步实践,按照文档电路图逐步搭建仿真模型,重点关注电压调节电路的实现细节与参数设置,并参考所提供的其他仿真资源拓展知识广度,强化工程思维训练。

优化算法侠_科研

阻尼器磁流变阻尼器MR Damper非线性(阻尼、滞回)特性研究(Matlab代码实现)

内容概要:本文围绕磁流变阻尼器(MR Damper)的非线性特性开展深入研究,重点剖析其在动态载荷作用下的阻尼力响应与滞回行为所表现出的强非线性特征,并基于Matlab平台进行系统建模与数值仿真。通过建立能够准确描述MR阻尼器非线性力学行为的数学模型,模拟其在不同激励条件、电流强度和运动频率下的动态响应过程,进而对系统的非线性特性进行定性与定量分析。研究涵盖了模型构建、参数设定、仿真执行与结果可视化等全过程,突出了Matlab在处理复杂非线性系统仿真中的强大功能与工程实用性,为智能材料器件在振动控制领域的应用提供了坚实的理论支撑与技术路径。; 适合人群:具备一定控制理论、机械动力学或智能材料基础知识,熟悉Matlab编程环境的研究生、科研人员及从事振动控制、结构工程等相关领域的工程技术人员。; 使用场景及目标:①用于智能材料与结构领域的科研与教学,帮助深入理解磁流变阻尼器的工作机理与非线性动力学特性;②为车辆半主动悬架系统、建筑结构抗震减震、桥梁风振抑制等实际工程中的振动控制系统设计、仿真验证与参数优化提供技术支持;③作为非线性系统建模、动力学仿真与Matlab编程实践的经典案例,有效提升使用者的系统分析能力和工程软件应用水平。; 阅读建议:建议读者结合文中提供的Matlab代码进行动手实践,通过调整模型参数(如电流、激励幅值与频率)观察系统响应的变化规律,深入探究非线性特性的形成原因与影响因素,并可尝试将该建模方法迁移至其他智能阻尼器件(如压电、电流变阻尼器)的研究中,以拓展应用视野。

程序猿鑫
评论 6
收藏 已收藏
分享
返回顶部
Sander
Linux/Unix社区 23,224 成员 74,535 内容