Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
POSIX
关于posix_sem_delete的问题
发布于 2019-07-09 21:18:56 浏览:1802
订阅该版
rtthread中sem_close与sem_destroy均会调用posix_sem_delete,而posix_sem_delete会释放入参psem的内存。感觉这不合理,如果信号量是静态内存呢。 版本:不限,3.0.4, 3.1.0 以及master上,均是如此。 ```static void posix_sem_delete(sem_t *psem) { sem_t *iter; if (posix_sem_list == psem) { posix_sem_list = psem->next; rt_sem_delete(psem->sem); rt_free(psem); return; } for (iter = posix_sem_list; iter->next != RT_NULL; iter = iter->next) { if (iter->next == psem) { /* delete this mq */ if (psem->next != RT_NULL) iter->next = psem->next; else iter->next = RT_NULL; /* delete RT-Thread mqueue */ rt_sem_delete(psem->sem); rt_free(psem); return ; } } }```
查看更多
7
个回答
默认排序
按发布时间排序
bernard
2019-07-10
这家伙很懒,什么也没写!
应该不会,sem_t是通过sem_open出来的,是动态分配的,不会是静态的。
wenbodong
2019-07-10
这家伙很懒,什么也没写!
>应该不会,sem_t是通过sem_open出来的,是动态分配的,不会是静态的。 --- 还有sem_init接口呢,rtthread文档示例程序用的就是sem_init, [https://www.rt-thread.org/document/site/programming-manual/posix/posix/#_62](https://www.rt-thread.org/document/site/programming-manual/posix/posix/#_62),这里截取部分代码,如下: ``` int rt_application_init() { int result; sem_init(&empty_sem,NULL,0); sem_init(&full_sem,NULL,0); /* 创建生产者线程, 属性为默认值,入口函数是 product,入口函数参数为 NULL*/ result = pthread_create(&tid1,NULL,product,NULL); check_result("product thread created",result); /* 创建消费者线程, 属性为默认值,入口函数是 consumer,入口函数参数是 NULL */ result = pthread_create(&tid2,NULL,consumer,NULL); check_result("consumer thread created",result); return 0; } ```
bernard
2019-07-10
这家伙很懒,什么也没写!
赞一个!涉及得很深 整体会这样, sem_t中的sem是指针,所以静态定义一个变量时,这个也是指针。 当执行sem_init时,这个sem会通过rt_sem_create创建出来,所以依然是动态创建的。(如果是sem_init的,会把sem_t->unlinked设置成0,在close的时候做小部分的特殊处理)
zhangjun
2019-07-10
这家伙很懒,什么也没写!
由于,对于静态信号量,使用rt_sem_init和rt_sem_detach来初始化和脱离,对于动态信号量,使用rt_sem_create和rt_sem_delete来创建和释放。但是楼主在考虑按静态信号量初始化却按动态信号量去删除,所以这样使用是不合适的。
bernard
2019-07-10
这家伙很懒,什么也没写!
>由于,对于静态信号量,使用rt_sem_init和rt_sem_detach来初始化和脱离,对于动态信号量,使用rt_sem_creat ... --- 楼主的考虑是有道理的,并不是你说的静态信号量/动态信号量呢,指的是POSIX semaphore这块
zhangjun
2019-07-10
这家伙很懒,什么也没写!
嗯嗯
wenbodong
2019-07-10
这家伙很懒,什么也没写!
>赞一个!涉及得很深 > >整体会这样, --- 感觉视调用的函数来区分就行,linux man手册中说 Only a semaphore that has been initialized by sem_init(3) should be destroyed using sem_destroy(). 既然sem_destroy仅用于处理sem_init的信号量,那它就不需要去释放信号量本身的内存了。
撰写答案
登录
注册新账号
关注者
0
被浏览
1.8k
关于作者
wenbodong
这家伙很懒,什么也没写!
提问
19
回答
44
被采纳
3
关注TA
发私信
相关问题
1
移植rt-thread2.1.0缺少components/pthreads里的posix_types.h文件中包含的sy
2
[征集自愿者] POSIX相关章节文档编写
3
RT-Thread POSIX支持
4
POSIX标准接口针对文件系统没有导出fsync
5
POSIX接口的select还没实现?
6
pthread 组建bug反馈
7
RTT中的POSIX支持
8
RT-Thread 如何用POSIX接口
9
使用 RT_USING_POSIX finsh能显示,但不能输入
10
请教、讨论POSIX接口、dfs中的pos和size问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
9
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
4
次点赞
Ghost_Girls
1
篇文章
7
次点赞
xiaorui
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部