具有缓存功能,当写入速度大于读取速度时可以实现缓存。 希望能够提供代码实例!!!!!
2条回答 默认 最新
- qfl_sdu 2021-05-21 11:58关注
写了一个子线程写队列,主线程读队列的简单例子。代码如下,如有帮助,请采纳一下,谢谢。
main.cpp:
#include <pthread.h> #include <queue> #include <string> #include <stdio.h> #include <unistd.h> using namespace std; queue<string> g_qMsg; //队列 pthread_mutex_t g_mutexWork; //互斥锁 int g_index = 0; //子线程写输入 void* DoMyJob(void* pParam) { char buf[100] = {0}; while(true) { sprintf(buf,"this is %d",g_index); g_index++; if (g_index >= 80) { printf("write 80,stop write\n"); usleep(10000000); break; } pthread_mutex_lock(&g_mutexWork); g_qMsg.push(buf); pthread_mutex_unlock(&g_mutexWork); usleep(10000); //10毫秒写入一次 } return 0; } int main() { pthread_mutex_init(&g_mutexWork,NULL); //初始化线程锁 //启动线程 pthread_t threadId; pthread_create(&threadId, NULL, DoMyJob, 0); string strMsg = ""; //主线程读数据 while(1) { if (g_qMsg.size() > 0) { pthread_mutex_lock(&g_mutexWork); strMsg = g_qMsg.front(); g_qMsg.pop(); pthread_mutex_unlock(&g_mutexWork); printf("main read:%s\n",strMsg.c_str()); } usleep(500000); //500毫秒读取一次 } return 0; }
Makefile文件(这是一个通用的makefile,你自己make也行):
#编译器LINUX CXX=g++ #编译动态库 CXXDL= -g -lpthread $(LIB) COMPILE=-c -g #编译目标文件 CXXFLAGS=-g $(INCLUDE) -fPIC #头文件搜索路径 INCLUDE=-I./ #动态库 LIB=-L./ #目标文件 OBJ_FILES=main.o #可执行文件或者动态库 TARGET=./threadtest $(TARGET):$(OBJ_FILES) @echo "Link the $@ starting..." $(CXX) -o $(TARGET) $(OBJ_FILES) $(CXXDL) @echo "Link the $@ done." $OBJ_FILES:%.o:%.cpp $(CXX) $< -o $@ $(COMPILE) -I$./ clean: rm $(OBJ_FILES) $(TARGET)
解决 无用评论 打赏 举报
悬赏问题
- ¥15 SQLite 出现“Database is locked” 如何解决?
- ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
- ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题
- ¥100 无网格伽辽金方法研究裂纹扩展的程序
- ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
- ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
- ¥50 求一位精通京东相关开发的专家
- ¥100 求懂行的大ge给小di解答下!
- ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
- ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏