【发布时间】:2020-04-22 05:13:14
【问题描述】:
我正在编写一个 c++ 应用程序,其中每 0.5 秒我将接收 4096 字节的数据。这被处理并且输出将被发送到其他一些应用程序。处理每组数据需要将近 2 秒。 我就是这样做的。 在我的主要功能中,我正在接收数据并将其推送到向量中。 我创建了一个线程,它将始终处理第一个元素并在处理后立即将其删除。下面是我的应用程序接收部分的模拟。
#include<iostream>
#include <unistd.h>
#include <vector>
#include <mutex>
#include <pthread.h>
using namespace std;
struct Student{
int id;
int age;
};
vector<Student> dustBin;
pthread_mutex_t lock1;
bool isEven=true;
void *processData(void* arg){
Student st1;
while(true)
{
if(dustBin.size())
{
printf("front: %d\tSize: %d\n",dustBin.front(),dustBin.size());
st1 = dustBin.front();
cout << "Currently Processing ID "<<st1.id<<endl;
sleep(2);
pthread_mutex_lock(&lock1);
dustBin.erase(dustBin.begin());
cout<<"Deleted"<<endl;
pthread_mutex_unlock(&lock1);
}
}
return NULL;
}
int main()
{
pthread_t ptid;
Student st;
dustBin.clear();
pthread_mutex_init(&lock1, NULL);
pthread_create(&ptid, NULL, &processData, NULL);
while(true)
{
for(int i=0; i<4096; i++)
{
st.id = i+1;
st.age = i+2;
pthread_mutex_lock(&lock1);
dustBin.push_back(st);
printf("Pushed: %d\n",st.id);
pthread_mutex_unlock(&lock1);
usleep(500000);
}
}
pthread_join(ptid, NULL);
pthread_mutex_destroy(&lock1);
}
这段代码的输出是 Output
在此处发布的输出图像中,您可以观察到处理的确切顺序。每 4 次插入它只处理一项。
Note that the reception time of data <<< processing time.
由于这个原因,我的输入缓冲区增长得非常快。还有一件事是,由于主线程和 processData 线程使用互斥锁,它们相互依赖才能释放锁。由于这个原因,我的传入缓冲区有时会被锁定,从而导致数据丢失。请有人向我建议如何处理此问题或建议我一些方法。
感谢和问候
Vamsi
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
-
我的回答或其他人是否解决了您的问题?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步为您提供帮助。谢谢。 meta.stackexchange.com/questions/5234/…
标签: c++ multithreading real-time