热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

LinuxC容易忽视的错误

一、pthread_attr_setstacksize设置栈大小有最小限制在使用pthread_attr_setstacksize函数时发现公司的项目全部设置错误,
一、pthread_attr_setstacksize  设置栈大小有最小限制

在使用 pthread_attr_setstacksize  函数时发现公司的项目全部设置错误,且全部没有检查返回值,这样导致了创建线程时栈大小设置失败,系统使用默认的栈大小来进行创建线程。

手册中明确指出,当设置的栈小于16K时,pthread_attr_setstacksize  函数可以返回 EINVAL 错误,但是我们项目组以及前一任项目组都没有发现这个问题,并且也没人提出疑问,大家都是默认参考别人的代码进行使用,例如 8*1024、4*1024 等等,

我给经理提出,经理不以为然,爱搭不理的感觉,大概意思就是说既然没有设置成功,那我们的线程,岂不是全部有问题了?

我们的其中一个进程有20几个线程

晚饭后我再次提出,并且说明了当前系统的栈设置为128K,依然不以为然。

......................................

我觉得此事到此为止了,我把自己负责的代码写好就OK。

我们的项目内存比较紧张,去年已经在很多低级错误上面花费了很多时间及精力,大家忙于解bug,忙于实现需求,甚至有的问题莫名其妙出现了,莫名其妙又解决了,甚至改了一个地方,发现有效,就认为问题解决了。

现在的项目成员有10年工作经验,7-8年工作经验,3-4年工作经验,上一任项目组成员最老的有20年左右工作经验,好几个十几年工作经验的,学历研究生、本科都有

 

这个问题让我很是感慨........

还是要坚持自己的原则,凡是有返回值的函数,必须检查返回值;凡是可能出错的函数,必须进行出错处理;C 库函数尽量查看手册,一来加深记忆,养成好习惯;二来对函数有充分的了解,便于对函数的返回值及功能进行更加灵活的应用;

OK,写两行代码验证下,小于16384时使用系统设置的大小128K,大于等于16384时,使用用户设置的栈大小

我们的ARM板子系统设置的是128K,当然,Linux 系统默认的是8M

 


推荐阅读
  • 本文介绍了如何在Linux系统中获取库源码,并在从源代码编译软件时收集所需的依赖项列表。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • 在多线程编程环境中,线程之间共享全局变量可能导致数据竞争和不一致性。为了解决这一问题,Linux提供了线程局部存储(TLS),使每个线程可以拥有独立的变量副本,确保线程间的数据隔离与安全。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 中断向量是计算机系统中用于指向中断服务程序的入口地址。每个中断向量对应一个特定的中断事件,存储在内存中的中断向量表中。该表通常包含256个条目,每个条目占用4个字节,用于存放跳转指令或直接指向中断处理程序的地址。 ... [详细]
  • cJinja:C++编写的轻量级HTML模板引擎
    本文介绍了cJinja,这是一个用C++编写的轻量级HTML模板解析库。它利用ejson来处理模板中的数据替换(即上下文),其语法与Django Jinja非常相似,功能强大且易于学习。 ... [详细]
  • GNU 发布的 glibc 是 Linux 系统中最基础的 C 运行库,提供了一系列底层 API,几乎所有其他运行库都依赖于它。本文详细介绍了 glibc 的主要功能和服务,并探讨了其在系统开发中的重要性。 ... [详细]
  • 在一个大型的应用系统中,往往需要多个进程相互协作,进程间通信(IPC,InterProcessCommunication)就显得比较重要了。在Linux系统中,有很多种IPC机制, ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • 本文详细介绍了Linux系统中信号量的相关函数,包括sem_init、sem_wait、sem_post和sem_destroy,解释了它们的功能和使用方法,并提供了示例代码。 ... [详细]
author-avatar
晶晶9930_195
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有