我得到了需要在不同阶段处理的各种类型的传感器数据。根据我所阅读的内容,最有效的方法是将任务拆分为线程。每个将处理后的数据放入下一个线程的入口队列中。所以基本上,一个管道。
数据可能非常大(几 Mbs),因此需要将其从传感器缓冲区中复制出来,然后传递给将修改它并传递它的线程。
我有兴趣了解进行传球的最佳方式。我读到,如果我在线程之间进行消息发布,我可以分配数据并将指针传递给其他线程,以便接收线程可以处理取消分配它。我不太确定,这对于流数据如何工作,即确保线程按顺序处理消息(我想我可以添加时间检查?)。另外,我应该为这样的实现使用什么数据结构?我想我无论如何都需要使用锁?
使用同步队列会更有效吗?
让我知道其他解决方案是否更好。计算需要实时进行,所以我需要这样做才能真正高效。如果有人链接到通过线程管道传递数据的良好示例,我将非常有兴趣查看它。
警告:没有 boost 或其他库。使用线程。我需要使实现尽可能接近标准库。这最终将用于各种平台(我还不知道)。
显然我们仍然会维护它,但是一旦C++标准保证,它将是多么有用.
随着新标准的出现,同步原语(互斥,条件变量)怎么样?
你是否认为pthread比std :: thread更难掌握?
我见过使用pthread编写C++程序和使用线程库的其他代码的多线程程序的代码.使用线程库而不是ptheard有什么好处?
我的代码试图传递一个std :: map作为线程的引用,但似乎有些不好并导致
error: invalid conversion from ‘void* (*)(std::map<std::basic_string<char>,
std::vector<std::basic_string<char> > >)’ to ‘void* (*)(void*)’ [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
我需要将map传递给线程并在该线程中插入map的键和值,并在成功之后.在主进程中,我需要更新或复制(线程映射)在同一映射的另一个对象,即myMapcache
int main()
{
std::map< std::pair<std::string , std::string> , std::vector<std::string> > myMap,myMapCache;
pthread_t threads;
//how to pass map object in thread as reference
int rc = pthread_create(&threads, NULL, myfunction, std::ref(myMap));
if (rc)
{
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
// if true then update to local myMapCache
if(update)
{
std::copy(myMap.begin(), myMap.end(), std::inserter(MyMapCache, myMapCache.end()) );
}
}
void * …
Run Code Online (Sandbox Code Playgroud)