网上找了一会儿,一时半刻找不到合适的实现SysV 消息队列的API,没办法,只好直接用Mutex 实现了一个PV操作的消息队列。
接口:
OS_MSGQ_Handle OS_MSGQ_Create(
API_IN int queueSize, // should <= MSGQ_SIZE_MAX
API_IN int dataSize // should <= MSGQ_DATASIZE_MAX
);
OS_RET OS_MSGQ_Destroy(
API_IN OS_MSGQ_Handle pHandle
);
OS_RET OS_MSGQ_Recv(
API_IN OS_MSGQ_Handle pHandle,
API_IN char *pmsg,
API_IN int size, // should <= dataSize
API_IN int wait
);
OS_RET OS_MSGQ_Send(
API_IN OS_MSGQ_Handle pHandle,
API_IN char *pmsg, int size ,
API_IN int wait
);
OS_RET OS_MSGQ_Flush(
API_IN OS_MSGQ_Handle pHandle
);
实现:
主要用了3个锁
API同步锁
读同步锁 接收的时候判断队伍是否为空,空的话挂起读同步锁
写同步锁 发送时判断队列是否满,满的话挂起写同步锁
Debug时,发现自己一直搞晕写与读,发送端对应写同步锁,接收端对应读同步锁。
写了2-3个小时才实现好。
Mutex:
接口:
OS_Mutex_Handle OS_Mutex_Create();
OS_RET OS_Mutex_Destroy(
API_IN OS_Mutex_Handle pHandle
);
OS_RET OS_Mutex_Lock(
API_IN OS_Mutex_Handle pHandle
);
OS_RET OS_Mutex_UnLock(
API_IN OS_Mutex_Handle pHandle
);
实现:
pthread_mutex_init(&mutex->mutexID, NULL);
pthread_mutex_lock(&mutex->mutexID);
pthread_mutex_unlock(&mutex->mutexID);
pthread_mutex_destroy(&mutex->mutexID);
分享到:
相关推荐
winlibs-x86_64-posix-seh-gcc-11.3.0-llvm-14.0.3-mingw-w64msvcrt-10.0.0-r3.zip
mingw编译器离线库,mingw-64.i686-6.3.0-posix-dwarf-rt_v5-rev1.mingw32。 文件夹路径:mingw-64/i686-6.3.0-posix-dwarf-rt_v5-rev1/mingw32/
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
支持c++23
mingw编译器离线库,mingw-64.i686-6.3.0-posix-dwarf-rt_v5-rev1.mingw32_2。 文件夹路径:mingw-64/i686-6.3.0-posix-dwarf-rt_v5-rev1/mingw32/
mingw-w64离线包,解压就可以使用,无需安装,该资源只为方便下载,官网 http://www.mingw-w64.org/doku.php 下载太慢了,如果可以连接官网,最好在官网下载。
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
新手程序员建议收藏,当做手册随时可查
MingW-x86_64-8.1.0-release-posix-seh-rt_v6-rev0
mingw编译器离线库,mingw-64.i686-6.3.0-posix-dwarf-rt_v5-rev1。 文件夹路径:mingw-64/i686-6.3.0-posix-dwarf-rt_v5-rev1/
nuitka依赖资源
arm-none-linux-gnueabi-gcc.exe -v Using built-in specs. COLLECT_GCC=arm-none-linux-gnueabi-gcc.exe ...Thread model: posix gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite
POSIX接口标准, PSE51, PSE52, PSE54, IEEEStd1003.13-2003IEEEStandardforInformationTechnology-StandardizedApplicationEnvironmentProfile(AEP_-POSIXRealtim
manpages-posix-dev离线安装包。提供给yum install manpages-posix-dev没用的同学。
mavros-posix-sitl.launch
MinGW-W64的32位安装包:i686-8.1.0-release-posix-sjlj-rt_v6-rev0.7z支持GCC8.1.0, 解压后即可使用。 利用下载工具下载的也是此压缩包,然后解压缩而已。 方便没梯子的!!!!
mingw x86_64-7.3.0-release-posix-seh-rt_v5-rev0离线完整安装包,无需安装,配置环境变量后即可用。
jruby-dist-9.1.15.0-bin.tar.gz JRuby是面向Ruby、基于Java虚拟机...New POSIX-friendly IO and Process Fully ported encoding/transcoding logic from MRI MD5:01c29690324d7eb414fba66e4c009c9e 大小:20.0 MB
x86_64-posix-seh和MinGW-W64-install.exe