我想写一个多线程的程序用于异步加载创建纹理图像,现在有这种设想,大致的先后顺序流程如图所示。其中线程B是主线程,不能阻塞,线程A是加载线程用于解析文件格式和拷贝数据。线程C是渲染线程,加载进来的图像纹理都通过线程C调用API存在显存中。
由于第一次写多线程程序,遇到一个问题:
应该如何协作同步这些线程,使得执行顺序正确,并保持相对高的效率,应该使用C++中哪些对应的函数和功能?需要实现哪些多线程的概念呢?如果可以的话求写一个大概的实现?
现在我同步线程是用了一堆bool类型的变量和while来阻塞线程AC,我感觉这样可能有问题。由于一些实现上的原因,方案本身不能修改,所以只问一下在代码实现上的问题,希望得到高手解答,非常感谢!
每個執行緒有一個事件循環就可以了,有事件就處理,沒事件就阻塞在佇列.
事件循環可以用std::thread, std::mutex, std::condition_variable, std::queue, std::function組合起來,嫌麻煩直接用boost::asio::io_service,三個線程run不同的io_service.
用起來就是A POST B, B POST C, C POST A.
需要注意的地方就是異步投遞用智能指針引用資源,要不就純拷貝,可以移動就移動,還有共享資源的競爭.
下面程式碼看起來比較難看,但是差不多就是這個意思.
最好說明一下所用的c++版本(c++98,c++11,c++14...?)以及所使用的作業系統(windows,Linux...?)。不同的組合,有不同的多執行緒機制。